【发布时间】:2017-01-24 11:36:53
【问题描述】:
我有以下T-SQL 代码,该代码正在SQL Server 2014 中使用。
SELECT s.[CusNo] Supplier,
RTRIM(CAST(s.[Customer] AS VARCHAR(50)) ) AS Name,
sum(case when s.Date
BETWEEN CASE
WHEN GETDATE() <= DATEADD(Day,-0,CONVERT(datetime, CONVERT(varchar(4), (year(GETDATE()))) + '-02-01'))
THEN DATEADD(Day,-1,CONVERT(datetime, CONVERT(varchar(4), (year(GETDATE())-1)) + '-02-01'))
ELSE DATEADD(Day,-1,CONVERT(datetime, CONVERT(varchar(4), (year(GETDATE()))) + '-02-01'))
END
AND
CASE
WHEN GETDATE() = DATEADD(Day,-0,CONVERT(datetime, CONVERT(varchar(4), (year(GETDATE()))) + '-02-01'))
THEN DATEADD(Day,-1,CONVERT(datetime, CONVERT(varchar(4), (year(GETDATE()))) + '-02-01'))
ELSE Convert(date, dateadd(wk, datediff(wk, 0, GETDATE()) - 1, 0) + 5)
END
then s.SELLINC else 0 end) YrToDateActual
FROM [dbo].[CustomerReports] s
WHERE s.BRN = 1 or s.BRN = 2 or s.BRN = 3 or s.BRN = 4 or s.BRN = 5 or s.SELLINC is null or s.SELLINC = '0'
GROUP BY s.[CusNo], s.[Customer]
在上面的 TSQL 代码中我使用了 where 子句(s.BRN = 1 or s.BRN = 2 or s.BRN = 3 or s.BRN = 4 or s.BRN = 5),
因此我得到以下结果,
Supplier Name YTDA(12345)
2 A C Limited 10
13 A Co Ltd 20
24 A Worth 30
我正在努力实现以下答案,
YTDA(12345)= where (s.BRN = 1 or s.BRN = 2 or s.BRN = 3 or s.BRN = 4 or s.BRN = 5)
YTDA(1)= where (s.BRN = 1)
YTDA(2)= where (s.BRN = 2)
YTDA(3)= where (s.BRN = 3)
YTDA(4)= where (s.BRN = 4)
YTDA(5)= where (s.BRN = 5)
所以输出我期待这样的东西,
Supplier Name YTDA(12345) YTDA(1) YTDA(2) YYTDA(3) YTDA(4) YTDA(5)
2 A C Limited 10 10 10 10 10 10
13 A Co Ltd 20 20 20 20 20 20
24 A W worth 30 30 30 30 30 30
请问T-SQL 代码是什么?
【问题讨论】:
-
尝试每个 YTDA(X) = Sum(CASE WHEN s.BRN = X then
else 0 end)。因此,对于每个 YTDA,您只需将与相应 s.BRN 匹配的值相加。 -
这种查询格式很难阅读和理解...
-
@jarlh 我已经更新了。
-
不能用 PIVOT 吗?它们是 YTDA 的动态吗?
-
@amir-pelled 感谢工作
标签: sql sql-server sql-server-2008 tsql where-clause