Oracle SQL-如何在选择中将多行合并为一

时间:2018-10-16 13:30:43

标签: sql oracle

通过以下查询:

SELECT id
    , typ_produktu
    , miary_wewnetrzne
    , CASE
         WHEN symbol LIKE '760%' THEN SUM(sal-type_number)
       ELSE NULL
      END sum_760
    , CASE
        WHEN symbol LIKE '860%' THEN SUM(sal-type_number)
       ELSE NULL
      END sum_860 
 FROM 537_MV 
WHERE
      rep_date = 20180930
      AND id   = 'DP\1601'
      AND miary_wewnetrzne IN ('WN', 'wynik')
      AND typ_w IN( 'RT_SZT', 'brak') 
GROUP BY
      id
    , symbol
    , typ_produktu
    , miary_wewnetrzne
    , typ_w

我得到这张桌子:

id      typ_produktu miary_wewnetrzne sum760 sum860
------- ------------ ---------------- ------ ------
DP\1601 brak         wynik                17      0
DP\1601 brak         wynik                 9      0
DP\1601 brak         wynik                 1      0
DP\1601 brak         wynik                 0      1
DP\1601 AIN          WN                    0      0

我如何编写查询以仅在表中获取ID的一条记录(即DP \ 1601),如果typ_produktu ='brak',我想在该示例中将其替换为该ID的任何其他记录是“ AIN”。

2 个答案:

答案 0 :(得分:1)

您可以使用聚合:

SELECT id,
       COALESCE(MAX(CASE WHEN typ_produktu <> 'BRAK' THEN typ_produktu END), MAX(typ_produktu)) as typ_produktu
       MAX(miary_wewnetrzne)
       SUM(CASE WHEN symbol LIKE '760%' THEN sal - type_number END) as sum_760
       SUM(CASE WHEN symbol LIKE '860%' THEN sal - type_number END) as sum_860 
FROM 537_MV
WHERE rep_date = 20180930 AND
      id   = 'DP\1601' AND
      miary_wewnetrzne IN ('WN', 'wynik') AND
      typ_w IN ( 'RT_SZT', 'brak')
GROUP BY id;

请注意,如果您希望每id行一行,那么它应该是GROUP BY中的唯一列。

答案 1 :(得分:0)

使用条件聚合并从分组依据中删除typ_w列

SELECT id
    , typ_produktu
    , miary_wewnetrzne
    , sum(CASE
                WHEN symbol LIKE '760%'
                THEN sal-type_number
                ELSE 0
      END) as sum_760
    , sum(CASE
                WHEN symbol LIKE '860%'
                THEN sal-type_number
                ELSE 0
      END) as sum_860 FROM
      537_MV WHERE rep_date = 20180930 AND id   = 'DP\1601'
      AND miary_wewnetrzne IN ('WN', 'wynik')
      AND typ_w IN( 'RT_SZT', 'brak') GROUP BY
      id, typ_produktu, miary_wewnetrzne