这有点难以解释我需要做什么,但我会尽我所能,请帮助我。真正的工作要复杂得多,但是,我首先要知道如何做基本的工作。
假设我有一个名为TABLE-A
的表,ID
是主键,TYPE
,而Approved Date
YEAR('Approved Date')
实际上有几年的范围。我希望SELECT STATEMENT
在指定年份每周运行一次COUNT(TYPE)
(在这种情况下WHERE YEAR = 2011
。我怎样才能解决这个问题?
在我的公司,目前,我们使用的Excel文件只是下载了整个表格,并使用大量额外列进行了大量计算,以获得此结果。
答案 0 :(得分:3)
您必须使用动态SQL和PIVOT
来实现目标
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX)
SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME('week ' + CONVERT(NVARCHAR(2), DATEPART(isowk, adate))
+ ' - ' + CONVERT(NVARCHAR(4), YEAR(adate)))
FROM Table1
ORDER BY 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
SET @sql = 'SELECT type, ' + @cols +
' FROM
(
SELECT type,
''week '' + CONVERT(NVARCHAR(2), DATEPART(isowk, adate))
+ '' - ''
+ CONVERT(NVARCHAR(4), YEAR(adate)) week,
COUNT(*) type_count
FROM table1
WHERE adate BETWEEN ''20130101'' AND ''20131231''
GROUP BY type, YEAR(adate), DATEPART(isowk, adate)
) x
PIVOT
(
MAX(type_count) FOR week IN (' + @cols + ')
) p
ORDER BY type'
EXECUTE(@sql)
示例输出:
| TYPE | WEEK 1 - 2013 | WEEK 2 - 2013 | ---------------------------------------- | A | 4 | 1 | | B | 2 | 2 |
这是 SQLFiddle 演示