Duvida de String em tabela

15/06/2020

6

Tenho a seguinte tabela:
CREATE TABLE Setor (codigo integer not null, codigo_pai integer, sigla varchar(30), constraint PK_Setor primary key(codigo), constraint FK_Setor foreign key(codigo_pai) references setor(codigo));

INSERT INTO setor values (1, null, 'Presidencia'),(2,1,'ST'), (3,1,'SCI'),(4,3,'COGES' ),(5,3,'COEPA'),(6,2,'SGA'),(7,6,'COGED'),(8,6,'COGELIC');

Agora preciso criar um comando SQL que, utilizando o String_AGG, traga o setor responsável e seus subsetores sem repetição, quando um setor não tiver subsetor ele não deve ser mostrado. Estou na duvida nesse procedimento, como faço isso?
Responder

Posts

15/06/2020

Ricardo Arraes

Tenho a seguinte tabela:
CREATE TABLE Setor (codigo integer not null, codigo_pai integer, sigla varchar(30), constraint PK_Setor primary key(codigo), constraint FK_Setor foreign key(codigo_pai) references setor(codigo));

INSERT INTO setor values (1, null, 'Presidencia'),(2,1,'ST'), (3,1,'SCI'),(4,3,'COGES' ),(5,3,'COEPA'),(6,2,'SGA'),(7,6,'COGED'),(8,6,'COGELIC');

Agora preciso criar um comando SQL que, utilizando o String_AGG, traga o setor responsável e seus subsetores sem repetição, quando um setor não tiver subsetor ele não deve ser mostrado. Estou na duvida nesse procedimento, como faço isso?


Fala Julio, beleza?

cara, acredito que podes tentar assim:

SELECT STRING_AGG(setpai.sigla) FROM Setor AS setsub LEFT JOIN Setor AS setpai ON setpai.codigo=setsub.codigo_pai WHERE (NOT setsub.codigo_pai IS NULL AND setsub.codigo_pai >0) GROUP BY setpai.sigla

não testei a query, então se essa não der certo, podes tentar tambem:

SELECT DISTINCT STRING_AGG(setpai.sigla) FROM Setor AS setsub LEFT JOIN Setor AS setpai ON setpai.codigo=setsub.codigo_pai WHERE (NOT setsub.codigo_pai IS NULL AND setsub.codigo_pai >0)

Se nenhum der certo, avisa que ai eu penso em outra coisa, mas tente entender o raciocínio por trás da query, acredito que pode lhe dar uma boa ideia de como usar
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar