我在SSIS中创建DTS - 数据包:
table users_properties:
[id] [user_id] [prop_name] [prop_value] 1 1 LastName Hendrix 2 1 FirstName John 3 2 LastName Adamson 4 2 FirstName Smith 5 2 Age 28
如何获得具有此结构的表格:
[user_id] [LastName] [FirstName] [Age] 1 Hendrix John
是否可以在没有JOIN(性能!!!)的情况下执行此操作,例如,通过case语句或Visual Studio中的组件?请告知如何做到这一点。
答案 0 :(得分:2)
使用CASE语句......
SELECT
user_id,
MAX(CASE WHEN prop_name = 'FirstName' THEN prop_value END) AS FirstName,
MAX(CASE WHEN prop_name = 'LastName' THEN prop_value END) AS LastName,
MAX(CASE WHEN prop_name = 'Age' THEN prop_value END) AS Age
FROM
yourTable
GROUP BY
user_id
注意:这假设没有user_id拥有任何prop_name的一个值,并且不会对不同的数据类型进行任何转换,但您可以在必要时添加它。
或者,您可以在SQL中查找如何PIVOT。虽然我知道有很多人因此而被推迟,但更喜欢使用上面的CASE / Aggregate方法。在任一版本中,您必须事先知道您想要哪些列,如果没有动态SQL,则无法对动态数量的列进行操作。
编辑由于使用了已弃用的NTEXT类型而导致的数据透视示例。
SELECT
pvt.user_id, [LastName], [FirstName], [Age]
FROM
yourTable
PIVOT
( prop_value FOR prop_name IN ( [LastName], [FirstName], [Age] ) ) AS pvt
ORDER BY
pvt.user_id;