Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中使用Pivot动态检索多行_Sql_Sql Server_Pivot_Pivot Table - Fatal编程技术网

在SQL中使用Pivot动态检索多行

在SQL中使用Pivot动态检索多行,sql,sql-server,pivot,pivot-table,Sql,Sql Server,Pivot,Pivot Table,我希望为特定透视表添加多行 表名:MasterTable FieldName | FieldValue ------------------------ Field1 | F1value1 Field2 | F2value1 Field3 | F3value1 Field1 | F1value2 Field2 | F2value2 Field3 | F3value2 预期结果: Field1 | Field2 | Field3 -

我希望为特定透视表添加多行

表名: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
有人能帮我用数据透视表做多行吗

对于子查询,请使用:

(select FieldName, FieldValue,
        row_number() over (partition by FieldName order by FieldName) as seqnum
 from MasterTable
)
pivot
将在数据透视中考虑这一点


注意:这将保证行数,但每列的顺序是任意的。您可能希望用一个合理的列来替换
订单。

它起作用,但在'Field1 | Field2 | Field3 F1value1 null F1value2 null F2Value2 null F2value1 null F3Value2 null F3Value2`@Roshmi。我遗漏了
分区。更新的版本将解决这个问题。你能再次帮助我吗。我发现显示值时出现问题。它显示出不同的秩序。第1列第1行显示“F1Value1”,第1列第2行显示“F1Value2”,但第2列第1行显示“F2Value2”,第2列第2行显示“F2Value1”。我需要所有的“Value1”作为第一行,“value2”作为第二行。为此,我还向表“RowOrder”添加了一个新字段,该字段将指定数据透视表的顺序。但我找不到解决办法。@Roshmi。新问题应作为新问题提出。