db2 根据多列更改表

3gtaxfhh  于 4个月前  发布在  DB2
关注(0)|答案(1)|浏览(51)

我有一个表,它有像IDcategorytypedateShop这样的类别。我想创建一个新表,在那里我删除type列。如果IDCategoryDateShop是相同的,那么我删除多行,只保留一行,并添加他们购买了多少物品的计数。如果IDcategorydateshop是相同的,但是category不是,category变成了水果/蔬菜,计数与购买的物品数量相加。我已经突出显示了我当前的表格和新表格的外观。但是我不确定如何创建这个新表格。
我从

CREATE TABLE SINGLE_ROW AS
SELECT ID, Category, Date, Shop
FROM customer_items

字符串
但我不知道怎么把table改装成我需要的样子。
| ID|类别|类型|日期|店|
| --|--|--|--|--|
| 1 |水果|苹果|23年1月2日|店铺3|
| 1 |水果|香蕉|23年1月2日|店铺3|
| 1 |水果|草莓|23年4月2日|店铺3|
| 2 |水果|苹果|15/2/23|店铺1|
| 2 |蔬菜|胡萝卜|15/2/23|店铺1|
| 3 |水果|香蕉|14/6/23|店铺5|
| 3 |水果|香蕉|14/6/23|店铺10|
| ID|类别|日期|店|计数|
| --|--|--|--|--|
| 1 |水果|23年1月2日|店铺3| 2 |
| 1 |水果|23年4月2日|店铺3| 1 |
| 2 |水果/蔬菜|15/2/23|店铺1| 2 |
| 3 |水果|14/6/23|店铺5| 1 |
| 3 |水果|14/6/23|店铺10| 1 |

rqdpfwrv

rqdpfwrv1#

您可以使用所谓的REFRESH DEFERRED MQT。
当您完成编辑customer_items时,只需运行REFRESH TABLE语句,以使Db2自动重新计算SINGLE_ROW表,并根据其定义中的查询获得agg结果。
如果需要,您也可以创建索引来加速SINGLE_ROW上的用户查询。

CREATE TABLE customer_items AS 
(
SELECT *
FROM
(
VALUES 
  (1, 'Fruit', 'Apple     ', '1/2/23 ', 'Shop3 ')
, (1, 'Fruit', 'Banana    ', '1/2/23 ', 'Shop3 ')
, (1, 'Fruit', 'Strawberry', '4/2/23 ', 'Shop3 ')
, (2, 'Fruit', 'Apple     ', '15/2/23', 'Shop1 ')
, (2, 'Veg  ', 'Carrot    ', '15/2/23', 'Shop1 ')
, (3, 'Fruit', 'Banana    ', '14/6/23', 'Shop5 ')
, (3, 'Fruit', 'Banana    ', '14/6/23', 'Shop10')
) T (ID, Category, Type, Date, Shop)
) WITH DATA

x

CREATE TABLE SINGLE_ROW AS
(
SELECT 
    ID
  , LISTAGG (DISTINCT Category, '/') AS CATEGORY
  , Date
  , Shop
  , COUNT (1) AS COUNT
FROM customer_items
GROUP BY ID, Date, Shop
) DATA INITIALLY DEFERRED REFRESH DEFERRED
REFRESH TABLE SINGLE_ROW
SELECT * FROM SINGLE_ROW

的数据
| ID|类别|日期|店|计数|
| --|--|--|--|--|
| 1 |水果|23年1月2日|店铺3| 2 |
| 1 |水果|23年4月2日|店铺3| 1 |
| 2 |水果/蔬菜|15/2/23|店铺1| 2 |
| 3 |水果|14/6/23|店铺10| 1 |
| 3 |水果|14/6/23|店铺5| 1 |
fiddle

相关问题