具有大型数据集的 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 导出转换为多值)

带有大型数据集的 SQL 插入

在具有大型数据集的 Firebase 数据库上查询非常非常慢

R:具有 2 个大型数据集的模式匹配金融时间序列数据:

具有大型(70,000+ 项)数据集的高效 jQuery 实时搜索