sql - PIVOT SQL Server 协助

标签 sql sql-server sql-server-2005 t-sql pivot

给定以下表结构:

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/

相关文章:

php - 使用 SQL 选择查询的结果来更新表

sql-server - 动态 SQL 和存储过程优化

sql - 奇怪的 SQL 行为,我想知道为什么会这样

mysql - mysql/sqlserver 中截断与删除的比较

sql - 在该范围内每天将 "From"和 "To"日期列扩展到 1 行

sql - 检查查询是否已完成

sql-server - 如何在两个服务器之间共享全局变量

sql-server - 用户定义的数据类型和#temp 表

sql-server - 如何备份SQL Server代理作业?

validation - SSIS 2005 如何以编程方式解决错误 "input column has lineage id that was not previously used in the data flow task"