【问题标题】:SQL - INSERT new row by using sum of two existing rows from same tableSQL - 使用同一表中两个现有行的总和插入新行
【发布时间】:2020-04-30 15:38:08
【问题描述】:

我正在努力编写一个有效的 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 列(地点、开始日期和结束日期)分组,因为我有很多不同的地点,以及开始和结束日期。而且我只想将跑步和跳跃活动结合到运动中,所有其他活动都应该不受影响。

【问题讨论】:

  • 我想你只是在问GROUP BY。你熟悉吗?

标签: sql sql-insert


【解决方案1】:

关键是您要在“活动”的选择语句中添加一个 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

【讨论】:

  • 当然这可能比你需要的更简单。确保添加您需要的任何过滤(WHERE 子句)以及您需要的任何表和列别名。
【解决方案2】:

这应该可以解决问题:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2020-03-11
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多