【发布时间】:2017-09-12 18:45:24
【问题描述】:
我创建了一个动态 SQL 查询,它连接了几个表,然后从一个名为 Geometries 的表中提取出来,该表存储名称/值对。 SQL 是动态的,因为在运行时我不知道需要转出哪些名称/值对。
下面的查询为我提供了我需要的数据,但是,所有几何列都列出了两次,就好像我从同一数据中旋转了两次一样。我无法弄清楚为什么会发生这种情况。我怀疑这与我在公用表表达式中选择名称/值对的事实有关,该表达式在下面的代码示例的第 13 行选择几何名称/值列:g.Name[Geometry], g.Value
也许将它与底部附近的 PIVOT 代码结合会导致我的查询结果中出现重复的列数据?
我无法删除第 13 行的代码,或者 PIVOT 失败并出现错误,指出 Geometry 和 Value 不是有效的列名。
无论如何,这里是查询...
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(g.Name)
FROM Geometries g
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query =
'SELECT *, ' + @cols + '
FROM (
SELECT
r.Id[RunId], rd.Id[RunDataId], r.RunNumber [Run #], r.TestNumber [Test #], r.Description,
rd.data1, rd.data2, rd.data3,
g.Name[Geometry], g.Value
FROM dbo.Runs r
INNER JOIN RunDatas rd ON r.Id = rd.RunId
INNER JOIN RunGeometries rg ON rg.RunId = r.Id
INNER JOIN Geometries g ON g.Id = rg.GeometryId
) as data
PIVOT
(
Max(Value) FOR Geometry IN (' + @cols + ')
) as p'
execute sp_executesql @query
任何帮助找出导致重复数据的原因将不胜感激。
【问题讨论】:
-
可能是您的表格,而不是您的 PIVOT。执行 SELECT DISTINCT r.ID、rd.ID 等...以确保您没有为 PIVOT 带来欺骗
标签: sql sql-server pivot dynamic-sql