具有大型数据集的 SQL Server 中的数据透视表
Posted
技术标签:
【中文标题】具有大型数据集的 SQL Server 中的数据透视表【英文标题】:Pivot table in SQL Server with a large data set 【发布时间】:2016-02-14 05:11:04 【问题描述】:我有一个大型数据集,并试图在 SQL Server 中复制一个 excel 数据透视表。我找不到不必使用 T-SQL 中的 PIVOT
函数手动命名列标题的示例。
我正在寻找一种方法来使用SELECT DISTINCT [column 1]
作为我的行名和SELECT DISTINCT [COLUMN 2]
作为我的列名,并使用第三列中的数据填充该表。
请帮忙!
【问题讨论】:
在 SQL Server 中这样做的唯一方法是使用动态 sql,这可能会有点混乱且难以调试。 SQL Server dynamic PIVOT query?的可能重复 关于 SO 的许多示例,这里有更多:example1; example2、example3、example4 等等。 【参考方案1】:试试这个:
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)。以上是关于具有大型数据集的 SQL Server 中的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章
从 sql server 迁移到大型数据集的 sqlite 的最快方法
组合行 + 连接大型数据集的值(将 SQL 导出转换为多值)