I have the following sql statement:
SELECT * FROM TB_CADPRECO
WHERE MAT_GESTOR = 123
AND UF_PRODUTO LIKE 'PR'
AND TIPO_CAMPANHA = 5
AND DT_CAMPANHA = '01.08.2018'
UNION
SELECT * FROM TB_CADPRECO
WHERE MAT_GESTOR = 123
AND UF_PRODUTO LIKE 'PR'
AND TIPO_CAMPANHA = 0
AND DT_CAMPANHA IS NULL
ORDER BY 1
In this scenario:
|produto|mat_gestor|uf_produto|tipo_campanha|dt_campanha| dt_alteracao |
| 1 | 123 | PR | 0 | null |01.01.18 23:54:56|
| 2 | 123 | PR | 0 | null |01.01.18 23:53:56|
| 3 | 123 | PR | 0 | null |01.01.18 23:52:56|
| 4 | 123 | PR | 0 | null |01.01.18 23:51:56|
| 5 | 123 | PR | 0 | null |01.01.18 23:50:56|
| 5 | 123 | PR | 5 | 01.08.2018|01.01.18 22:58:56|
| 2 | 123 | PR | 5 | 01.08.2018|01.01.18 23:55:56|
I want you to return it like this:
|produto|mat_gestor|uf_produto|tipo_campanha|dt_campanha| dt_alteracao |
| 1 | 123 | PR | 0 | null |01.01.18 23:54:56|
| 2 | 123 | PR | 5 | 01.08.2018|01.01.18 23:55:56|
| 3 | 123 | PR | 0 | null |01.01.18 23:52:56|
| 4 | 123 | PR | 0 | null |01.01.18 23:51:56|
| 5 | 123 | PR | 5 | 01.08.2018|01.01.18 22:58:56|
I'm trying to use UNION but it did not work.
I tried to use case:
SELECT * FROM TB_CADPRECO CAD
WHERE CAD.MAT_GESTOR = 2111531
AND CAD.UF_PRODUTO LIKE 'PR' AND
case when CAD.TIPO_CAMPANHA = 5 and CAD.DT_CAMPANHA = '01.08.2018' then
CAD.TIPO_CAMPANHA = 5 and CAD.DT_CAMPANHA = '01.08.2018'
else
CAD.TIPO_CAMPANHA = 0 and CAD.DT_CAMPANHA is null
end
ORDER BY produto
But keep bringing the duplicate records. I can not put Distinct in select because I have datetime fields.
Resolved as follows:
SELECT CAD.*, P.DESC_PRODUTO AS desc_produto,
FROM TB_CADPRECO CAD
LEFT JOIN TB_PRODUTO P ON CAD.COD_PRODUTO = P.COD_PRODUTO
WHERE
MAT_GESTOR = 123
AND UF_PRODUTO LIKE 'PR'
AND
(
(
(TIPO_CAMPANHA = 0 AND DT_CAMPANHA IS NULL) and CAD.cod_produto not in
(
SELECT cod_produto FROM TB_CADPRECO
WHERE
MAT_GESTOR = 123
AND UF_PRODUTO LIKE 'PR'
AND (TIPO_CAMPANHA = 5 AND DT_CAMPANHA = '01.08.2018')
)
)
OR
(TIPO_CAMPANHA = 5 AND DT_CAMPANHA = '01.08.2018')
)
ORDER BY 1