首页 > 解决方案 > 将新列和变量行添加到 SQL 选择查询作为输出并在其中执行算术运算

问题描述

我正在编写一个用于从表中选择数据的 SQL 查询,并将新列和变量行添加到 SQL 选择查询作为输出并在其中执行算术运算。

因此,选择查询会产生所需的结果,但我需要根据以下条件添加一个将包含的列:PERIOD_TYPE-DAY, WTD, MTD, YTD

DAY = @date_using(例如“2020-12-22”)

WTD = @date_using 到 @date_using 的一周的开始星期一日期(例如 2020 年 12 月 21 日到 2020 年 12 月 22 日)

MTD = @date_using 到 @date_using 的月份开始星期一日期(例如,2020 年 12 月 1 日到 2020 年 12 月 22 日)

YTD = @date_using 到 @date_using 的年份的开始星期一日期(例如 2020 年 1 月 1 日到 2020 年 12 月 22 日)

此外,还要添加一列,以SALES_LY_USD显示列数据的总和。

因此,SALES_LY_USD它将显示A.TY_SALES以下标准的总和:-

DAY : A.TY_SALES'2020-12-22' 的总和

WTD : A.TY_SALES(@date_using 到 @date_using 的周起始星期一日期)的总和(例如A.TY_SALES2020 年 12 月 21 日到 2020 年 12 月 22 日的总和)

MTD = A.TY_SALES(@date_using 到 @date_using 的月份的开始星期一日期)的总和(例如A.TY_SALES2020 年 12 月 1 日到 2020 年 12 月 22 日的总和)

YTD = A.TY_SALES(@date_using 到 @date_using 的年份的起始星期一日期)的总和(例如A.TY_SALES2020 年 1 月 1 日至 2020 年 12 月 22 日的总和)

因此,示例输出表应该是:-

国家 PERIOD_TYPE SALES_LY_USD
ID 15
ID WTD 30
ID MTD 300
ID 年初至今 3600

我正在编写下面的代码,但我无法在 Period_Type 列中获取上面共享的这 4 个 Period_Types,也无法使用它们在 SALES_LY_USD 列中显示总和。

DECLARE @date DATE=DATEADD(DAY,-1,CAST(GETDATE() AS DATE))
DECLARE @sale_date_ly DATE
DECLARE @date_using DATE = '2020-12-07'
DECLARE @DAY_PERIOD_TYPE_TY DATE
DECLARE @WTD_PERIOD_TYPE_TY DATE
DECLARE @MTD_PERIOD_TYPE_TY DATE
DECLARE @YTD_PERIOD_TYPE_TY DATE

SET @sale_date_ly = (select last_year_same_dd_date from analyse.HKMN_MD_TIME where display_date=@date_using)

SET @DAY_PERIOD_TYPE_TY = (select Date from [dbo].[DimDate]  where date=@date_using)

SET @WTD_PERIOD_TYPE_TY  = (SELECT CONCAT (Convert(date,DATEADD(wk,DATEDIFF(wk,0,@date_using),0)), ' To ', @date_using )

SET @MTD_PERIOD_TYPE_TY  = (SELECT CONCAT ((select FirstDayOfMonth from [dbo].[DimDate] where date=@date_using ), ' To ', @date_using )

SET @YTD_PERIOD_TYPE_TY  = (SELECT CONCAT ((select FirstDayOfYear from [dbo].[DimDate] where date=@date_using ), ' To ', @date_using )


SELECT  

A.COUNTRY As COUNTRY,
@sale_date_ly As PERIOD_TYPE ,
sum(B.TY_SALES)  AS SALES_LY_USD

from [SE].[SHAPE] A
INNER JOIN [SE].[LF_SHAPE] B
ON A.COUNTRY=B.COUNTRY

标签: sqlsql-serverdate

解决方案


推荐阅读