Eu tenho duas mesas. A Tabela 1 possui IDs distintos
Tabela 1:
EU IA |
---|
123 |
456 |
789 |
*Observação: há mais colunas em T1, mas não são mostradas para maior clareza
A Tabela 2 possui vários códigos associados a cada ID. Parece assim:
EU IA | Código |
---|---|
123 | 001 |
123 | 002 |
123 | 003 |
123 | 004 |
456 | 001 |
456 | 003 |
789 | 002 |
789 | 003 |
Preciso juntar T2 a T1 e preciso criar uma coluna de rótulos onde se um ID estiver associado ao código 002 ou 004 então deverá ser rotulado DESCARREGADO. Se não estiver associado, então OUTRO
Minha saída deve ficar assim:
EU IA | Rótulo |
---|---|
123 | DESCARREGADO |
456 | OUTRO |
789 | DESCARREGADO |
Eu tentei esse SQL
SELECT t1.ID,
CASE
WHEN t2.CODE IN ('002','004') THEN 'DISCHARGED'
ELSE 'OTHER'
END AS LABEL
FROM T1.t1
LEFT JOIN T2.t2 on t1.ID=t2.ID
GROUP BY
CASE
WHEN t2.CODE IN ('002','004') THEN 'DISCHARGED'
ELSE 'OTHER'
END,
t1.ID
Mas isso está me dando IDs duplicados e, portanto, muitas linhas
EDIT: Os IDs com os quais estou trabalhando são na verdade números (tipo de coluna NUMBER (22). Usei letras para simplificar, mas percebi que isso pode afetar as respostas, por isso estou alterando os IDs.
Este código tenta resolver o problema com CTE, left join e ISNULL. isso é executado no SQL Server
Consulta
Saída
Esquema