【发布时间】:2017-02-22 09:20:03
【问题描述】:
我有一个包含laserform名称和日期的表格,例如
我的表名为 myBWB_LaserForms
laserform editwhen
LRAP1.lpw 2009-09-03 16:06:00.000
CON29R.lpw 2009-10-29 12:35:00.000
UN1.lpw 2010-03-02 11:38:00.000
UN244.lpw 2012-04-19 12:14:00.000
LT3.lpw 2013-01-02 11:00:00.000
LRAP1.lpw 2007-12-10 15:34:00.000
我要生成的是一份报告,其中左侧有激光形式的名称,顶部有年份,例如2004、2005、2006,然后每个相交的单元格都会计算该表单名称在该特定年份的记录数。
通常我会做类似的事情
select l.laserform,
(select count(*) from mybwb_laserforms l1 where l1.laserform=l.laserform and year(editwhen)=2004) AS [2004],
(select count(*) from mybwb_laserforms l2 where l2.laserform=l.laserform and year(editwhen)=2005) AS [2005],
(select count(*) from mybwb_laserforms l3 where l3.laserform=l.laserform and year(editwhen)=2006) AS [2006],
(select count(*) from mybwb_laserforms l4 where l4.laserform=l.laserform and year(editwhen)=2007) AS [2007]
from mybwb_laserforms l
group by l.laserform
order by l.laserform
但是我意识到这是非常可怕的 SQL,我应该对此更加聪明。
我一直在尝试学习如何使用枢轴功能,但我很难理解它。
此外,我发现的大多数示例似乎都对查询的列进行了硬编码 - 如果数据透视表可以是动态的并获得唯一的 year(editwhen) 值,那就太好了,这样我接下来就不必修改查询了一年和之后的一年。
【问题讨论】: