繁体   English   中英

SQL Append 数据在同一个表中从一列到另一列

[英]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-012021-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM