SQL grouping information

0

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
    
asked by anonymous 24.01.2018 / 17:47

1 answer

0

Test the following code:


SELECT produto,mat_gestor,uf_produto,max(tipo_campanha),max(dt_campanha)
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 = 0 AND DT_CAMPANHA IS NULL)
)
GROUP BY produto,mat_gestor,uf_produto
ORDER BY produto

    
24.01.2018 / 18:11