2016-02-14 81 views
0

我有一个大型的数据集,试图复制SQL Server中的Excel数据透视表。我无法找到一个示例,我不必在T-SQL中使用PIVOT函数手动命名列标题。在SQL Server中使用大型数据集的数据透视表

我正在寻找一种方法,将SELECT DISTINCT [column 1]用作我的行名称,SELECT DISTINCT [COLUMN 2]用作我的列名称,并使用第三列中的数据填充该表格。

请帮忙!

+1

在SQL Server来做到这一点的唯一方法是使用动态SQL,它可以是一个有点乱,难以调试。 – Nicarus

+0

可能重复的[SQL Server动态PIVOT查询?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) –

+1

关于SO的许多例子,这里更多:[example1](https: //stackoverflow.com/questions/12430512/dynamic-pivot-table-in-sql-server); [示例2](https://stackoverflow.com/questions/35347342/sql-dynamic-pivot-for-goals/35350343#35350343),[示例3](https://stackoverflow.com/questions/35192602/pivot-and -unpivot-for-4-joined-table-sql-server/35204649#35204649),[example4](https://stackoverflow.com/questions/35173463/sql-pivot-insertion/35175883#35175883)等等。 –

回答

0

试试这个:

DECLARE @v_Columns VARCHAR(MAX),@v_StartDate DATETIME = '09/15/2015',@v_EndDate DATETIME = '12/15/2020',@v_Query VARCHAR(MAX)SELECT @v_Columns = COALESCE(@v_Columns,'[') + convert(varchar, Date, 101) + '],[' 
FROM 
(SELECT DISTINCT Date FROM view_wc_sessions_info) th 
WHERE 
th.Date BETWEEN @v_StartDate AND @v_EndDate 

SET @v_Columns = SUBSTRING(@v_Columns, 1, LEN(@v_Columns)-2) 

SET @v_Query = 

'SELECT 
* 
FROM 
(
select [Total], Date, fk_student_rcid 
    from view_WC_SESSIONS_Info th 
WHERE 
th.Date BETWEEN ''' + CONVERT(VARCHAR(50), @v_StartDate, 101) + ''' 
AND ''' + CONVERT(VARCHAR(50), @v_EndDate, 101) + ''' 
) src 
PIVOT 
(
COUNT(src.[Total]) 
FOR src.Date IN (' + @v_Columns + ') 
) AS pivotview' 

EXEC(@v_Query) 
+0

^我认为代码可以正常工作,但我得到以下错误 消息1701,级别16,状态1,行1 创建或更改表'FakeWorkTable'失败,因为最小行大小为8205,包括133字节的内部开销。这超过了8094字节的最大允许表行大小。 消息8630,级别17,状态48,行1 内部查询处理器错误:查询处理器在执行期间遇到意外错误(HRESULT = 0x80004005)。 – Jordan