我有一个大型的数据集,试图复制SQL Server中的Excel数据透视表。我无法找到一个示例,我不必在T-SQL中使用PIVOT
函数手动命名列标题。在SQL Server中使用大型数据集的数据透视表
我正在寻找一种方法,将SELECT DISTINCT [column 1]
用作我的行名称,SELECT DISTINCT [COLUMN 2]
用作我的列名称,并使用第三列中的数据填充该表格。
请帮忙!
我有一个大型的数据集,试图复制SQL Server中的Excel数据透视表。我无法找到一个示例,我不必在T-SQL中使用PIVOT
函数手动命名列标题。在SQL Server中使用大型数据集的数据透视表
我正在寻找一种方法,将SELECT DISTINCT [column 1]
用作我的行名称,SELECT DISTINCT [COLUMN 2]
用作我的列名称,并使用第三列中的数据填充该表格。
请帮忙!
试试这个:
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)
^我认为代码可以正常工作,但我得到以下错误 消息1701,级别16,状态1,行1 创建或更改表'FakeWorkTable'失败,因为最小行大小为8205,包括133字节的内部开销。这超过了8094字节的最大允许表行大小。 消息8630,级别17,状态48,行1 内部查询处理器错误:查询处理器在执行期间遇到意外错误(HRESULT = 0x80004005)。 – Jordan
在SQL Server来做到这一点的唯一方法是使用动态SQL,它可以是一个有点乱,难以调试。 – Nicarus
可能重复的[SQL Server动态PIVOT查询?](http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query) –
关于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)等等。 –