【发布时间】:2012-01-13 15:33:30
【问题描述】:
如何使用 SQL PIVOT 命令对看起来像这样的数据进行 sql 数据透视?
id | field | value
---------------------------------------
1 | year | 2011
1 | month | August
2 | year | 2009
1 | day | 21
2 | day | 31
2 | month | July
3 | year | 2010
3 | month | January
3 | day | NULL
变成这样的东西:
id | year | month | day
-----------------------------
1 2011 August 21
2 2010 July 31
3 2009 January NULL
【问题讨论】:
-
最好是更改表,而不是进行花哨的查询以使其看起来像应该的那样。
-
@Ben - 同意,有远更好的方法来存储这些数据,即使考虑到某些“字段”可能需要
null。如果这些月份名称实际上是字符串,请向设计师开枪。破坏决定为day属性存储null键值的人(而不是完全放弃该属性)。我不确定为什么要这样设置,但我相信日历表 + 日期部分表(和几个视图)会占用更少的空间,提供 FK/数据类型安全,并且可能性能更高。 -
这是一个常见的场景,由开发人员创建一个元数据表,希望在与每个 ID 关联的元数据字段的数量方面具有灵活性。
标签: sql sql-server-2008 pivot