如何使用SQL Server获取一年中的计数(项目)

时间:2013-07-14 05:47:36

标签: sql-server

这有点难以解释我需要做什么,但我会尽我所能,请帮助我。真正的工作要复杂得多,但是,我首先要知道如何做基本的工作。

假设我有一个名为TABLE-A的表,ID是主键,TYPE,而Approved Date YEAR('Approved Date')实际上有几年的范围。我希望SELECT STATEMENT在指定年份每周运行一次COUNT(TYPE)(在这种情况下WHERE YEAR = 2011。我怎样才能解决这个问题?

在我的公司,目前,我们使用的Excel文件只是下载了整个表格,并使用大量额外列进行了大量计算,以获得此结果。

enter image description here

1 个答案:

答案 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 演示