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
Postar um comentário