SQL Server:列数组

lem*_*unk 1 sql sql-server-2008

January好吧,我一直在思考动态列的想法,我的意思是一个名为......的列表December

用户在运行时将选择月份范围,例如FebJuly

我通常会做的是从后面的代码中获取所有列,然后对我需要的列和不需要的列进行排序。

但我想知道如何在 SQL 中完成这一切。

我知道 SQL 不支持数组(悲伤的表情),但还有其他选择。

所以我的问题是,有没有一种方法可以设置 SQL 查询,根据作为一系列列名称的参数动态选择多个列?

我查看了一些动态查询,但它们只执行 1 列。

我正在考虑将后面的代码提供的一串列作为 SQL 中的 1 个参数传递,然后以某种方式迭代以选择每一列。

你们有什么感想?不能完成吗?可以做但是很乱?

编辑:我想我会提供一些代码,正如您所看到的,我应用了数据透视查询并获取了一系列列(月)。到目前为止所建议的是先正常化,然后转向。

SELECT
   [1] January ,
   [2] February,
   [3] March,
   [4] April,
   [5] May,
   [6] June,
   [7] July,
   [8] August,
   [9] September,
   [10] October,
   [11] November,
   [12] December
   FROM
(
  SELECT MONTH(Convert(datetime,[lasttaken],120)) as months, complete
  FROM #Temp WITH(NOLOCK)
) d
pivot 
(
   count(complete)
   for months in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12])
) p 
Run Code Online (Sandbox Code Playgroud)

Bin*_*ier 5

有一种方法可以做到这一点,但需要重组你的表。
您的问题是(月)列名称是元数据,您想查看它们

代替

year | Jan | feb | Mar | Apr | etc  
2013 | 10  | 9   | 11  | 4   | 0
Run Code Online (Sandbox Code Playgroud)

作为实际数据。

您想要做的是为月份制作一列,并将数据标准化为如下所示。

year | month | data
2013 | 1     | 10
2013 | 2     | 9
2013 | 3     | 11
2013 | 4     | 4
Run Code Online (Sandbox Code Playgroud)

现在可以按月份查询数据了。

这就是您必须进行数据设计的方式,以便能够按照您想要的方式查询数据。

希望这可以帮助。