【问题标题】:Retrieving multiple rows dynamically using Pivot in SQL在 SQL 中使用 Pivot 动态检索多行
【发布时间】:2020-03-26 07:06:55
【问题描述】:

我希望为特定的数据透视表添加多行。

表名:MasterTable

 FieldName | FieldValue
------------------------
 Field1    | F1value1
 Field2    | F2value1
 Field3    | F3value1
 Field1    | F1value2
 Field2    | F2value2
 Field3    | F3value2

预期结果:

Field1     | Field2    | Field3
---------------------------------
F1value1   | F2value1 | F3value1
F1value2   | F2value2 | F3value2

我尝试了这段代码,但结果只有一行。

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(FieldName) from MasterTable FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
    set @query = 'SELECT  ' + @cols + ' from (select FieldName, FieldValue from MasterTable ) x
                pivot 
                (
                    max(FieldValue)
                    for FieldName in (' + @cols + ')
                ) p '

    execute(@query)

输出:

Field1     | Field2    | Field3
---------------------------------
F1value1   | F2value1 | F3value1

有人可以帮助我使用数据透视表获得多行吗?

【问题讨论】:

    标签: sql sql-server pivot pivot-table


    【解决方案1】:

    对于子查询,使用:

    (select FieldName, FieldValue,
            row_number() over (partition by FieldName order by FieldName) as seqnum
     from MasterTable
    )
    

    pivot 将在旋转时考虑到这一点。

    注意:这样会保证行数,但是每列的顺序是任意。您可能希望将order by 替换为合理的列进行排序。

    【讨论】:

    • 它有效,但在 ` Field1 | 之间显示空值字段2 |字段3 F1value1 NULL NULL F1value2 NULL NULL NULL F2Value2 NULL NULL F2value1 NULL NULL NULL F3Value NULL NULL F3Value2 `
    • @Roshmi 。 . .我省略了partition by。更新的版本将解决这个问题。
    • 你能再帮我一次吗?我在显示值时发现了问题。它显示出不同的顺序。在第 1 列第 1 行显示“F1Value1”,然后在第 1 列第 2 行显示“F1Value2”,但在第 2 列第 1 行显示“F2Value2”,第 2 列第 2 行显示“F2Value1”。我需要所有“Value1”作为第一行,“value2”作为第二行。为此,我还在“RowOrder”表中添加了一个新字段,它将指定数据透视表的顺序。但我找不到解决方案。
    • @Roshmi 。 . .新问题应作为新的问题提出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 2023-04-09
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多