首页 > 解决方案 > Oracle SQL - 如何在选择中将多行合并为一个

问题描述

从以下查询:

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

如果 typ_produktu = 'brak',我想在示例中将其替换为此 ID 的任何其他记录,我如何编写查询以在表中仅获取一条记录,即 'AIN '。

标签: sqloracle

解决方案


您可以使用聚合:

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


推荐阅读