Join entre duas Querys


Olá pessoal,

Neste post pretendo dar uma dica sobre como construir um Join entre duas Querys.

Suponha que existam duas tabelas em que é preciso fazer um join entre elas, mas não tem-se campos que possam ser comparados na condição do join.
Então é necessário fazer um tratamento em uma das tabelas para que seja possível simular uma espécie de chave comum para as duas tabelas.

Exemplo:
 Inseri no meu banco de dados informações de algumas empresas que obtive por meio de uma planilha, mas preciso definir que tipo de desconto cada empresa vai ter pela sua natureza, se ela é Ltda., S.A. ou cooperativa, pois preciso ter essa informação sobre cada empresa, porém eu não tenho essa informação diretamente na minha tabela, tenho que criar tal informação primeiro para depois fazer o Join entre as duas querys.

*** A demonstração que vou  fazer é no SQL Server 2008 ***

/*
tabela 1
(tem-se o nome e endereço de algumas empresas)
*/
SELECT NOME,ENDERECO FROM dbo.EMPRESA










/*
tabela 2
(tem-se o tipo de empresa e uma espécie de desconto para cada tipo)
*/
SELECT TIPOEMPRESA,DESCONTO FROM  dbo.DESCONTO








Fazendo um tratamento na query da tabela 1, obtêm-se o tipo de empresa usando uma condição CASE para verificar se existe dentro do campo nome uma palavra que possa ser comparada com o campo tipoempresa da tabela 2.

      SELECT
      NOME,ENDERECO,
      CASE
            WHEN NOME LIKE '%LTDA%'THEN 'LTDA'
            WHEN NOME LIKE '%S.A.%'THEN 'S.A.'
            WHEN NOME LIKE '%COOP%'THEN 'COOPERATIVA'
      END  TIPO
      FROM  dbo.EMPRESA









Dessa forma cria-se um novo campo dentro da query da tabela 1, o qual vai conter um tipo em que será possível comparar com o campo tipoempresa dentro do join das duas querys.

Então coloca-se a query tratada da tabela 1 dentro de parênteses e dá-se um nome para ela, coloca-se a query da tabela 2 dentro de parênteses e dá-se um nome para ela também.
Coloca-se o join entre as duas querys.
Depois da segunda query, faz-se a comparação entre o campo tipo da primeira query com o campo tipoempresa da segunda query.
No inicio dessa nova query que está se formando, coloca-se o Select trazendo os campos que deseja-se obter com o join dessas duas querys, no caso do exemplo, todas as informações da tabela 1, juntamente com qual o desconto que cada empresa vai ser inserida no banco de dados.

SELECT QR1.*,QR2.DESCONTO FROM
(
      SELECT
      NOME,ENDERECO,
      CASE
            WHEN NOME LIKE '%LTDA%'THEN 'LTDA'
            WHEN NOME LIKE '%S.A.%'THEN 'S.A.'
            WHEN NOME LIKE '%COOP%'THEN 'COOPERATIVA'
      END  TIPO
      FROM  dbo.EMPRESA
)QR1
JOIN
(
      SELECT TIPOEMPRESA,DESCONTO FROM  dbo.DESCONTO
)QR2
ON QR1.TIPO = QR2.TIPOEMPRESA










Agradeço ao meu colega de trabalho Felipe Delage, Analista de dados, antes de passar essa dica a vocês eu aprendi com ele.










Referências



Comentários