将列动态添加到View或从存储过程返回

时间:2011-04-18 20:12:13

标签: sql tsql

我发现了很多这方面的点点滴滴,但我不能把它们放在一起。这基本上是表的概念,其中name是varchar,date是datetime,number是int

Name | Date | Number
A     1-2-11  15
B     1-2-11   8
A     1-1-11   5

I'd like to create a view that looks like this

Name | 1-2-11 | 1-1-11
A      15       5
B       8

起初我使用临时表,并将每个日期行附加到它。我在另一个论坛上看到,这是一种主要的资源浪费。真的吗?有更好的方法吗?

4 个答案:

答案 0 :(得分:0)

如果日期列是已知集,则在某些情况下可以使用数据透视。

使用动态sql通常会更快但是这可能非常危险,所以要小心。

要真正了解您的问题的最佳解决方案,我们需要更多信息 - 数据量 - 不同列中预期的变化量等等。

但是,确实,PIVOT和Dynamic SQL都比临时表快。

答案 1 :(得分:0)

您想要查看“交叉表”或“数据透视”语句。在SQL Server 2005及以上,它的PIVOT,但平台之间的语法变化。

这是一个非常复杂的主题,特别是因为随着数据的增长,您希望在视图中添加列。除了您平台的文档,请查看关于该主题的无数其他SO帖子。

答案 2 :(得分:0)

如果我在this answer中提到,我会将动态SQL与数据透视结合起来。

答案 3 :(得分:-1)

我会使用Access或Excel代替T-SQL。