给定以下表结构:
CrimeID | No_Of_Crimes | CrimeDate | Violence | Robbery | ASB
1 1 22/02/2011 Y Y N
2 3 18/02/2011 Y N N
3 3 23/02/2011 N N Y
4 2 16/02/2011 N N Y
5 1 17/02/2011 N N Y
是否有机会使用 T-SQL 生成如下所示的结果集?
Category | This Week | Last Week
Violence 1 3
Robbery 1 0
ASB 3 1
上周的数据应小于“20/02/2011”,而本周的数据应大于或等于“20/02/2011”
我并不是在找人为我编写这个代码,尽管代码片段会很方便:),只是关于这是否可行以及我应该如何使用 SQL Server 来实现它的一些建议。
仅供引用,我目前正在 Web 服务器上使用 LINQ 执行所有这些聚合,但这需要每次发出此请求时通过网络发送 19MB。 (该表有很多类别,并且超过 150,000 行)。我想让数据库完成所有工作,只通过网络发送少量数据
非常感谢
最佳答案
编辑为了清楚起见删除了不正确的sql 编辑忘记上面的尝试下面的
select *
from (
select wk, crime, SUM(number) number
from (
select case when datepart(week, crimedate) = datepart(week, GETDATE()) then 'This Week'
when datepart(week, crimedate) = datepart(week, GETDATE())-1 then 'Last Week'
else 'OLDER' end as wk,
crimedate,
case when violence ='Y' then no_of_crimes else 0 end as violence,
case when robbery ='Y' then no_of_crimes else 0 end as robbery,
case when asb ='Y' then no_of_crimes else 0 end as asb
from crimetable) as src
UNPIVOT
(number for crime in
(violence, robbery, asb)) as pivtab
group by wk, crime
) z
PIVOT
( sum(number)
for wk in ([This Week], [Last Week])
) as pivtab
关于sql - PIVOT SQL Server 协助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116157/