[英]SQL Append Data from One Column to Another in Same Table
到目前为止,我编写的代码生成了“原始”标题下列出的 output。 我正在尝试将 append 附加值添加到REVENUE
列,但不是从OLDREVENUE
求和,而是希望它从位于同一个表中但与未来日期相关的另一个名为NEWREVENUE
的列求和。
SELECT MONTH_DATE AS MONTH_YEAR,
SUM(OLDREVENUE) AS REVENUE,
[PRODUCT],
COALESCE(TOP_CUST, '(blank)') AS TOP_CUST
FROM [SALES].[TABLE1]
WHERE LEFT(CCYYMM, 4) > YEAR(GETDATE())-5
AND MONTH_DATE IS NOT NULL
AND MONTH_DATE < DateAdd(month, -2, Convert(date, GETDATE()))
AND [PRODUCT] = 'TOWELS'
AND TOP_CUST = 'CUSTOMER1'
GROUP BY [PRODUCT], COALESCE(TOP_CUST, '(blank)'), MONTH_DATE
ORDER BY TOP_CUST, MONTH_DATE
有没有办法做到这一点,其中NEWREVENUE
值对应于2020-07-01
到2021-12-01
的日期?
示例数据来自上面的代码,所需的 output 数据是我希望我的代码在从NEWREVENUE
列中提取值并将它们附加到REVENUE
列后生成的数据。
原来的:
MONTH_YEAR REVENUE PRODUCT TOP_CUST
2018-01-01 4913 TOWELS CUSTOMER1
2018-02-01 2531 TOWELS CUSTOMER1
2018-03-01 3235 TOWELS CUSTOMER1
2018-04-01 3840 TOWELS CUSTOMER1
2018-05-01 3343 TOWELS CUSTOMER1
2018-06-01 6740 TOWELS CUSTOMER1
2018-07-01 11389 TOWELS CUSTOMER1
2018-08-01 1060 TOWELS CUSTOMER1
2018-09-01 3156 TOWELS CUSTOMER1
2018-10-01 1826 TOWELS CUSTOMER1
2018-11-01 11917 TOWELS CUSTOMER1
2018-12-01 3591 TOWELS CUSTOMER1
2019-01-01 9906 TOWELS CUSTOMER1
2019-02-01 10802 TOWELS CUSTOMER1
2019-03-01 -798 TOWELS CUSTOMER1
2019-04-01 11955 TOWELS CUSTOMER1
2019-05-01 12027 TOWELS CUSTOMER1
2019-06-01 8790 TOWELS CUSTOMER1
2019-07-01 6901 TOWELS CUSTOMER1
2019-08-01 11579 TOWELS CUSTOMER1
2019-09-01 681 TOWELS CUSTOMER1
2019-10-01 62 TOWELS CUSTOMER1
2019-11-01 7534 TOWELS CUSTOMER1
2019-12-01 10234 TOWELS CUSTOMER1
2020-01-01 7064 TOWELS CUSTOMER1
2020-02-01 1201 TOWELS CUSTOMER1
2020-03-01 8989 TOWELS CUSTOMER1
2020-04-01 9722 TOWELS CUSTOMER1
2020-05-01 4605 TOWELS CUSTOMER1
2020-06-01 7248 TOWELS CUSTOMER1
所需的 Output:
MONTH_YEAR REVENUE PRODUCT TOP_CUST
2018-01-01 4913 TOWELS CUSTOMER1
2018-02-01 2531 TOWELS CUSTOMER1
2018-03-01 3235 TOWELS CUSTOMER1
2018-04-01 3840 TOWELS CUSTOMER1
2018-05-01 3343 TOWELS CUSTOMER1
2018-06-01 6740 TOWELS CUSTOMER1
2018-07-01 11389 TOWELS CUSTOMER1
2018-08-01 1060 TOWELS CUSTOMER1
2018-09-01 3156 TOWELS CUSTOMER1
2018-10-01 1826 TOWELS CUSTOMER1
2018-11-01 11917 TOWELS CUSTOMER1
2018-12-01 3591 TOWELS CUSTOMER1
2019-01-01 9906 TOWELS CUSTOMER1
2019-02-01 10802 TOWELS CUSTOMER1
2019-03-01 -798 TOWELS CUSTOMER1
2019-04-01 11955 TOWELS CUSTOMER1
2019-05-01 12027 TOWELS CUSTOMER1
2019-06-01 8790 TOWELS CUSTOMER1
2019-07-01 6901 TOWELS CUSTOMER1
2019-08-01 11579 TOWELS CUSTOMER1
2019-09-01 681 TOWELS CUSTOMER1
2019-10-01 62 TOWELS CUSTOMER1
2019-11-01 7534 TOWELS CUSTOMER1
2019-12-01 10234 TOWELS CUSTOMER1
2020-01-01 7064 TOWELS CUSTOMER1
2020-02-01 1201 TOWELS CUSTOMER1
2020-03-01 8989 TOWELS CUSTOMER1
2020-04-01 9722 TOWELS CUSTOMER1
2020-05-01 4605 TOWELS CUSTOMER1
2020-06-01 7248 TOWELS CUSTOMER1
2020-07-01 2754 TOWELS CUSTOMER1
2020-08-01 3110 TOWELS CUSTOMER1
2020-09-01 2380 TOWELS CUSTOMER1
2020-10-01 2503 TOWELS CUSTOMER1
2020-11-01 2918 TOWELS CUSTOMER1
2020-12-01 1882 TOWELS CUSTOMER1
2021-01-01 2100 TOWELS CUSTOMER1
2021-02-01 2100 TOWELS CUSTOMER1
2021-03-01 2100 TOWELS CUSTOMER1
2021-04-01 2100 TOWELS CUSTOMER1
2021-05-01 2100 TOWELS CUSTOMER1
2021-06-01 2100 TOWELS CUSTOMER1
2021-07-01 2100 TOWELS CUSTOMER1
2021-08-01 2100 TOWELS CUSTOMER1
2021-09-01 2100 TOWELS CUSTOMER1
2021-10-01 2100 TOWELS CUSTOMER1
2021-11-01 2100 TOWELS CUSTOMER1
2021-12-01 2100 TOWELS CUSTOMER1
如果在同一个表中有另一个名为 NEWREVENUE 的列但与未来日期相关联,则可以使用 UNION ALL 将该数据添加到现有查询中。
/* Niha's query */
SELECT MONTH_DATE AS MONTH_YEAR,
SUM(OLDREVENUE) AS REVENUE,
[PRODUCT],
COALESCE(TOP_CUST, '(blank)') AS TOP_CUST
FROM [SALES].[TABLE1]
WHERE LEFT(CCYYMM, 4) > YEAR(GETDATE())-5
AND MONTH_DATE IS NOT NULL
AND MONTH_DATE < DateAdd(month, -2, Convert(date, GETDATE()))
AND [PRODUCT] = 'TOWELS'
AND TOP_CUST = 'CUSTOMER1'
GROUP BY [PRODUCT], COALESCE(TOP_CUST, '(blank)'), MONTH_DATE
ORDER BY TOP_CUST, MONTH_DATE
/* Append NEWREVENUE to exising */
UNION ALL
SELECT MONTH_DATE AS MONTH_YEAR,
SUM(NEWREVENUE) AS REVENUE,
[PRODUCT],
COALESCE(TOP_CUST, '(blank)') AS TOP_CUST
FROM [SALES].[TABLE1]
WHERE LEFT(CCYYMM, 4) > YEAR(GETDATE())-5
AND MONTH_DATE BETWEEN '2020-07-01' AND '2021-12-01'
AND [PRODUCT] = 'TOWELS'
AND TOP_CUST = 'CUSTOMER1'
GROUP BY [PRODUCT], COALESCE(TOP_CUST, '(blank)'), MONTH_DATE
ORDER BY TOP_CUST, MONTH_DATE;
或者,可以有一个截止日期并有条件地总结收入。
declare
@cutover_dt date='2020-07-01',
@end_dt date='2021-12-01',
/* Cutover query */
SELECT MONTH_DATE AS MONTH_YEAR,
iif(MONTH_DATE<@cutover_dt, SUM(OLDREVENUE), SUM(NEWREVENUE)) AS REVENUE,
[PRODUCT],
COALESCE(TOP_CUST, '(blank)') AS TOP_CUST
FROM [SALES].[TABLE1]
WHERE LEFT(CCYYMM, 4) > YEAR(GETDATE())-5
AND MONTH_DATE IS NOT NULL
AND MONTH_DATE < @end_dt
AND [PRODUCT] = 'TOWELS'
AND TOP_CUST = 'CUSTOMER1'
GROUP BY [PRODUCT], COALESCE(TOP_CUST, '(blank)'), MONTH_DATE
ORDER BY TOP_CUST, MONTH_DATE;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.