Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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/7/sql-server/26.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 动态枢轴_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 动态枢轴

Sql 动态枢轴,sql,sql-server,tsql,Sql,Sql Server,Tsql,我对pivotsql脚本有一个“小”问题。我目前的解决方案基于一个类似的问题 我已经成功地编写了PIVOT脚本,基本上还可以。然而,我的情况是这样的,脚本不是将唯一的条目放在一行上,而是输出如下内容 ListingEntryId Address Employees Location 1 NULL NULL Nottingham 1 Canal Street NULL

我对pivotsql脚本有一个“小”问题。我目前的解决方案基于一个类似的问题

我已经成功地编写了PIVOT脚本,基本上还可以。然而,我的情况是这样的,脚本不是将唯一的条目放在一行上,而是输出如下内容

ListingEntryId   Address        Employees   Location
1                NULL           NULL        Nottingham
1                Canal Street   NULL        NULL
1                NULL           3           NULL
2                NULL           NULL        London
2                Camden         NULL        NULL
2                NULL           12          NULL
而我想要的结果应该是这样的

ListingEntryId   Address        Employees   Location
1                Canal Street   3           Nottingham
2                Camden         12          London
这是剧本

DECLARE @listingId INT = 1;
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)

SELECT LEV.ListingColumnId, LEV.ListingEntryId, LE.CreatedBy, LEV.EntryValue, LD.ColumnTitle, LD.[Index]
INTO #ListingTable
FROM ListingEntryValue LEV LEFT OUTER JOIN 
ListingEntry LE ON LEV.ListingEntryId=LE.Id
LEFT OUTER JOIN 
ListingDefinition LD ON LEV.ListingColumnId = LD.Id
WHERE LE.ListingId = @listingId;

SELECT * FROM #ListingTable;

SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT ',' + QUOTENAME(LT.ColumnTitle) FROM #ListingTable LT
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1,1,'')
SELECT @cols;

SET @query = 'SELECT ListingEntryId,' + @cols + ' FROM (SELECT ListingEntryId, ListingColumnId, EntryValue, ColumnTitle, [Index] FROM #ListingTable LT) x
PIVOT (MAX(EntryValue) FOR ColumnTitle IN (' + @cols + ')
) p'

PRINT @query
EXECUTE(@query);


DROP TABLE #ListingTable

我会很感激一些能帮助我解决这个问题的建议。出于某种奇怪的原因,我做了一个示例,它只输出生成模式的所有代码,不输出任何内容

将PIVOT中的字段限制为仅需要的元素(X,Y,Value)

返回

ListingEntryId  Address         Employees   Location
1               Canal Street    3           Nottingham
2               Camden          12          London

@奥比诺拉很高兴这有帮助
ListingEntryId  Address         Employees   Location
1               Canal Street    3           Nottingham
2               Camden          12          London