我正在努力编写一个有效的SQL脚本,从同一张表中获取两条记录,并通过复制任何一条原始记录的值插入新的记录,除了一列使用两行之和。
表的样子是这样的,我想得到的插入结果是
--------------------------------------------------
| activity | place | begin_date | end_date | price |
-------------------------------------------------- -------------------------------------------
| running | gym | 2020-6-1 | 2020-7-1 | 10 | > | sports | gym | 2020-6-1 | 2020-7-1 | 30 |
--------------------------------------------------- -------------------------------------------
| jumping | gym | 2020-6-1 | 2020-7-1 | 20 |
---------------------------------------------------
问题是我需要按3列(地点、开始日期和结束日期)分组,因为我有许多不同的地点、开始和结束日期。我想只把跑步和跳跃活动合并到体育项目中,所有其他活动应该不受影响。
关键是你要在 "活动 "的select语句中加入一个case语句,然后用SUM()函数汇总你的价格。它看起来像这样
INSERT INTO dbo.Table
( activity
, place
, begin_date
, end_date
, price
)
SELECT CASE WHEN activity = 'running' OR activity = 'jumping' THEN 'sports' ELSE activity END
, place
, begin_date
, end_date
, SUM(price)
FROM dbo.Table t
GROUP BY CASE WHEN activity = 'running' OR activity = 'jumping' THEN 'sports' ELSE activity END
, place
, begin_date
, end_date
这应该是个好办法
INSERT INTO table (activity, place, begin_date, end_date, price)
SELECT 'sport', [place], [begin_date], [end_date], SUM([price])
FROM table
WHERE activity = 'jumping' OR activity = 'running'
GROUP BY place, begin_date, end_date