db2 如何添加到某个非空列的行中,该列为空?

hvvq6cgz  于 2022-12-18  发布在  DB2
关注(0)|答案(1)|浏览(278)

我刚开始学SQL,我需要你的帮助。
我有一个SQL数据,看起来像这样:
| 类型|集团|
| - ------|- ------|
| 苹果|A类|
| 橙子||
| 猕猴桃|B|
| 苹果||
| 橙子||
| 猕猴桃|C级|
| 苹果|C级|
| 苹果|C级|
我需要实现的是数据,将分组的原始类型和组,也有一列,其中将存储水果的数量。问题是,有必要添加水果的数量与相同类型的行,从行,这没有列组填充。
基本上,结果集应如下所示:
| 类型|集团|金额|
| - ------|- ------|- ------|
| 苹果|A类|第二章|
| 苹果|C级|三个|
| 苹果||1个|
| 猕猴桃|B| 1个|
| 猕猴桃|C级|1个|
| 橙子||第二章|
我所实现的只是下面的SQL查询,它并没有很好地覆盖任务。

SELECT type, group, count (fruitid) as amount
FROM table
GROUP BY type, group
hkmswyz6

hkmswyz61#

试试这个。

WITH 
  TAB (Type, Group) AS
(
  VALUES
  ('Apple', 'A')
, ('Orange', NULL)  
, ('Kiwi',  'B')
, ('Apple', NULL)
, ('Orange',    NULL)
, ('Kiwi',  'C')
, ('Apple', 'C')
, ('Apple', 'C')
)
, G AS
(
  SELECT 
    TYPE, GROUP
  , COUNT (*) AMOUNT
  FROM TAB
  GROUP BY TYPE, GROUP
)
SELECT 
  A.TYPE, A.GROUP
, A.AMOUNT + COALESCE (B.AMOUNT, 0)
  AS AMOUNT
FROM G A
LEFT JOIN G B
  ON B.TYPE = A.TYPE
     AND A.GROUP IS NOT NULL
     AND B.GROUP IS NULL
ORDER BY A.TYPE, A.GROUP

| 类型|组别|金额|
| - ------|- ------|- ------|
| 苹果|A类|第二章|
| 苹果|C级|三个|
| 苹果| * 无效 *| 1个|
| 猕猴桃|B| 1个|
| 猕猴桃|C级|1个|
| 橙子| * 无效 *| 第二章|
fiddle

相关问题