我已经在这里做了相当多的回顾,并且已经接近我需要的东西,但是我很难理解最后一点(或者我希望如此)。数据透视行到列SQL 2008
我使用动态枢纽从
DocID PropID StrVal NumVal DateVal
5938 21 TARRO, THOMAS A III NULL NULL
5938 21 TARRO, JUDITH A NULL NULL
5938 22 UNITED STATES NULL NULL
5938 27 NULL NULL 2011-10-03 09:33:00.000
5938 28 Discharge Release NULL NULL
5938 29 NULL 1115 NULL
5938 30 207 NULL NULL
转我的数据向
DocId 21 22 27 28 29 30
5938 TARRO, THOMAS A III UNITED STATES 2011-10-03 09:33:00.000 Discharge Release 1115 207
TARRO, JUDITH A
这里所需要的结果是代码
Declare @cols as nvarchar(max),
@query as nvarchar(max)
Select @cols = STUFF ((select distinct ',' + QUOTENAME(FieldName)
from GrantorGrantee
WHERE tocid='5938'
FOR XML Path(''), Type
).value('.','NVARCHAR(MAX)'),1,1,'')
Set @query = 'Select tocid, '+ @cols + 'from
(
select fieldname, tocid, FieldStrValue, FieldNumValue, FieldDateValue
from GrantorGrantee
) x
PIVOT
(
max(FieldStrValue)
for fieldname in (' [email protected] +')
) p '
execute (@query)
这段代码填充StrVal从样本数据,但我需要填写每个PropID的相应数据列。无论是字符串,值还是日期。
从以下数据:
Tocid fieldname StrVal NumVal DateVal
5938 Grantors Tarro, Thomas A III NULL NULL
5938 Grantors Tarro, Judith A NULL NULL
5938 TransactionDate NULL NULL 2011-10-03 09:33:00.00
5938 InstrumentType Discharge Release NULL NULL
5938 BookNumber NULL 1115 NULL
5938 PageRange 0207 NULL NULL
我可以在枢轴使用case语句中的聚合函数?这是处理最好的方法吗?我也必须处理propid = 21的double值...
谢谢!
这是上面的代码的结果。
Tocid BOOKNUMBER Grantees Grantors InstrumentType PageRange TransactionDate
5938 NULL UNITED STATES TARRO, THOMAS A III Discharge Release 0207 NULL
5938 NULL NULL NULL NULL NULL NULL
5938 NULL NULL NULL NULL NULL NULL
所以我抢StrVal和填充列,但SQL不知道如何处理DateVal和NumVal ...这就是为什么我在想一个case语句做。
为了测试旋转我没有移动到动态查询
之前做一个静态查询一些工作的源表的这整个概念下面是一个简单的静态查询,并从数据库中的表导致...这是我用什么来测试的概念...上面的代码使用一种观点认为,我可能会或可能不会想用...
select tocid, 21,22,27,28,29,30
from (
select tocid, prop_id
from dbo.propval
where dbo.propval.prop_id in (21,22,27,28,29,30) and tocid='5938'
--order by tocid
) x
PIVOT
(
max(prop_id)
for prop_id in ([21],[22],[27],[28],[29],[30])
) as p
结果在下面......不列标题
5938 21 22 27 28 29 30
这让我参与到那里......
问题是,在源表中的两行中显示的PropId 21,我需要它显示在作为两列的结果枢轴。
如果您可以添加生成的实际SQL以及它返回的内容,则会更容易提供帮助。欢呼 –
为什么从一开始就如此困难?为什么不先写一个* static *查询?只需假设一些有限数量的属性并为这些属性编写解决方案。为了将结果转换为动态查询,您可能会采用与单列转轴相同的方法。 “我还必须处理双重价值......” - 这是你问题的一部分吗?请解释你想如何处理。 (从你的例子中不是很清楚,如果多个值进入同一行,用一些分隔符或不同的行分隔?)另外,你还没有真正显示你自己尝试过什么... –
我已经更新了这篇文章一些额外的信息...谢谢! – user3215391