0

这有点难以解释我需要做什么,但我会尽力而为,请帮助我。实际工作要复杂得多,但是,我需要先知道如何做基础。

假设我有一个名为的表TABLE-A,它ID是主键,TYPE并且实际上有几年Approved Date的范围。YEAR('Approved Date')我想要一个SELECT STATEMENTCOUNT(TYPE)在指定年份的每周运行一次(在这种情况下WHERE YEAR = 2011。我该如何解决这个问题?

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

在此处输入图像描述

4

1 回答 1

3

你必须使用动态 SQLPIVOT来实现你的目标

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)

样本输出:

| 类型 | 第 1 周 - 2013 年 | 第 2 周 - 2013 年 |
--------------------------------------
| 一个 | 4 | 1 |
| 乙| 2 | 2 |

这是SQLFiddle演示

于 2013-07-14T06:26:25.760 回答