我有几个与SQL(MS SQL Server 2008 R2)和Pivots相关的问题,特别是"如何"部分重点关注需要使用的聚合函数。
以下是我目前正在处理的两个表中的一组数据:
FirstTable
EntryID ReferenceID
694535 51
694536 51
694537 51
694538 51
694539 51
SecondTable
EntryID AttributeName ValueString ValueInteger ValueFloat ValueDate
694535 Name John NULL NULL NULL
694536 Name Anne NULL NULL NULL
694537 Name Jack NULL NULL NULL
694538 Name Lisa NULL NULL NULL
694535 UserNumber NULL 1 NULL NULL
694536 UserNumber NULL 2 NULL NULL
694537 UserNumber NULL 3 NULL NULL
694538 UserNumber NULL 4 NULL NULL
SecondTable可以包含更多的AttributeName实体,如JoinDate(ValueDate),Surname(ValueString)等。我想要做的是转动数据,使得数据透视表有一组唯一的EntryID,将AttributeName的值列为它的列,Value列中的值填充这些列。
我不确定要使用哪种聚合函数以及何时应该使用这些聚合函数。然后实际的Pivot语法似乎也得到了我,任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用coalesce
从值列中获取NON NULL值,然后执行PIVOT
如果你知道属性名称列表,你可以列出它们类似于Name
和UserNumber
,你需要使用动态SQL来构建列名列表。
select T1.EntryID, [Name], [UserNumber] from
(select EntryID, AttributeName, coalesce(valueString, valueInteger, ValueFloat, ValueDate) as Value from Table2) T2
pivot
( max(Value) for [AttributeName] in ( [Name], [UserNumber])
) pvt
join Table1 T1
on T1.EntryID = pvt.EntryID
输出就像
EntryID Name UserNumber
694535 John 1
694536 Anne 2
694537 Jack 3
694538 Lisa 4