Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Resultado de uma consulta


D.Wirti

Pergunta

Bom tarde,

Espero que alguém consiga resolver minha dúvida.

Preciso fazer uma consulta que me retorne os valores de determinado campo para outro campo.

Ex: Possuo uma tabela de Cidades e uma tabela de dados relativos a empresas. Nessa tabela empresa possuo uma coluna chamada Segmento e outra coluna que referencia o código da cidade. Quero que a consulta me retorne a comparação de duas cidades.

Codifiquei o seguinte:

SELECT dbo.Cidades.Descricao,
       COUNT(Segmento) AS Cont, Segmento
FROM dbo.DadosEmpresa INNER JOIN
     dbo.Cidades ON dbo.DadosEmpresa.Cidade = dbo.Cidades.Codigo
WHERE Cidades.Descricao = 'CIDADE A' OR
      Cidades.Descricao = 'CIDADE B'
GROUP BY dbo.DadosEmpresa.Segmento,
         dbo.Cidades.Descricao
ORDER BY Descricao, Segmento

O resultado dessa consulta é:

Descricao ................... Cont ................. Segmento

----------------------------- ---------------------- --------

CIDADE A .................... 3 .................... Agropecuária

CIDADE A .................... 369 .................. Comércio

CIDADE A .................... 15 ................... Indústria

CIDADE A .................... 57 ................... Serviço

CIDADE B .................... 1 .................... Agropecuária

CIDADE B .................... 196 .................. Comércio

CIDADE B .................... 43 ................... Serviço

Mas o resultado que eu gostaria de obter seria:

Descricao ................... Cont ................. Segmento

----------------------------- ---------------------- --------

CIDADE A .................... 3 .................... Agropecuária

CIDADE A .................... 369 .................. Comércio

CIDADE A .................... 15 ................... Indústria

CIDADE A .................... 57 ................... Serviço

CIDADE B .................... 1 .................... Agropecuária

CIDADE B .................... 196 .................. Comércio

CIDADE B .................... 0 .................... Indústria

CIDADE B .................... 43 ................... Serviço

Como pode-se perceber, no primeiro caso como a CIDADE B não possui dados referentes ao Segmento Indústria, a consulta não me retorna nada.

Mas eu gostaria de visualizar isso, especificando que a CIDADE B possui 0 empresas cadastradas no Segmento Indústria.

Eu tentei usar uma variação do código acima, usando RIGHT JOIN e ISNULL((Segmento),0) mas o resultado obtido foi o mesmo.

Estou utilizando Windows 7 Enterprise x86 e SQL Server Management Studio 2008 que acessa um Servidor SQL Server 2008.

Espero que tenha conseguido passar o que eu gostaria.

Desde já grato.

Editado por D.Wirti
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde D.Wirti,

O left/right só funcionará se o relacionamento for com a tabela que possui as descrições do segmento. Desta forma, para a "Cidade A" apareceria todas os segmentos, com os zeros nos que não houvessem segmentos.

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde D.Wirti,

O left/right só funcionará se o relacionamento for com a tabela que possui as descrições do segmento. Desta forma, para a "Cidade A" apareceria todas os segmentos, com os zeros nos que não houvessem segmentos.

Bom dia fulvio, obrigado por responder.

Pois então, era o que eu imaginava. Mas o problema aqui é que devido a padronização de algumas tabelas excel + a codificação POG em Delphi usado para importar tais tabelas, eu não tenho como deixar isso em tabelas separadas.

Será que não existe outra solução para isso?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia D.Wirti,

Existe sim outra solução. Fazer um UNION e tentar filtrar os dados faltantes para inserção. Fiz um exemplo logo abaixo. Dê uma olhada se funciona para o seu caso.

-- criação de tabela temporária
CREATE TABLE #DadosEmpresa (chave int, codigo INT, segmento VARCHAR(30))
CREATE TABLE #Cidades (chave int, cidade VARCHAR(30))

-- inserção
INSERT INTO #Cidades VALUES (1, 'CIDADE A')
INSERT INTO #Cidades VALUES (2, 'CIDADE B')

INSERT INTO #DadosEmpresa VALUES (1,  3,  'Agropecuária')
INSERT INTO #DadosEmpresa VALUES (1,  369,  'Comércio')
INSERT INTO #DadosEmpresa VALUES (1,  15, 'Indústria')
INSERT INTO #DadosEmpresa VALUES (1,  57,  'Serviço')
INSERT INTO #DadosEmpresa VALUES (2,  1 , 'Agropecuária')
INSERT INTO #DadosEmpresa VALUES (2,  196, 'Comércio')
INSERT INTO #DadosEmpresa VALUES (2,  43 , 'Serviço')

-- Conferencia
SELECT * FROM #DadosEmpresa
SELECT * FROM #Cidades

-- Select
SELECT Cidade, codigo,de.segmento FROM #Cidades c, #DadosEmpresa de
WHERE de.chave=c.chave
UNION
SELECT Cidade, 0, de.segmento FROM #Cidades c, #DadosEmpresa de
WHERE de.chave=c.chave and de.segmento IN (SELECT de.segmento FROM #Cidades c, #DadosEmpresa de
WHERE de.chave=c.chave group by segmento HAVING COUNT(segmento)=1)

Link para o comentário
Compartilhar em outros sites

  • 0

Então fulvio, testei esse código que você postou mas o resultado continuou o mesmo.

Nesse meio tempo decidi deixar a preguiça de lado e padronizar a minha tabela, dessa forma criei uma tabela separada chamada Segmento, referenciando uma chave estrangeira na tabela DadosEmpresa. Como eu já tenho nesse mesmo padrão uma tabela separada chamada Cidade, ao invés de eu continuar usando o nome da cidade passei a usar o código da cidade.

Para melhor entendimento segue abaixo o meu novo código:

SELECT S.DESC_SEG,
       COUNT(E.Codigo_Empresa) AS TOTAL
FROM Segmento S LEFT JOIN
     DadosEmpresa E ON S.COD_SEG = E.COD_SEG AND
                       E.Cidade = 1 --Código referente ao nome da cidade
GROUP BY S.DESC_SEG

Dessa forma eu obtenho o resultado como eu gostaria. O único porém é que eu tenho que fazer uma consulta diferente para cada Cidade. Mas isso eu resolvo via programação no Delphi mesmo.

Muito obrigado pela prestatividade em responder e apresentar soluções fulvio.

Pode fechar o tópico como resolvido.

Link para o comentário
Compartilhar em outros sites

  • 0

rs... ok D.Wirti, disponha.

PS.: Rodei o script que postei e deu certo... rs (está fora de ordem). Foram 7 inserções na tabela "#DadosEmpresa" e o resultado retorna oito (inserção de 1 segmento a mais).

Colocarei o tópico como resolvido!! :.)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...