lem*_*unk 1 sql sql-server-2008
January好吧,我一直在思考动态列的想法,我的意思是一个名为......的列表December。
用户在运行时将选择月份范围,例如Feb至July。
我通常会做的是从后面的代码中获取所有列,然后对我需要的列和不需要的列进行排序。
但我想知道如何在 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)
有一种方法可以做到这一点,但需要重组你的表。
您的问题是(月)列名称是元数据,您想查看它们
代替
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)
现在可以按月份查询数据了。
这就是您必须进行数据设计的方式,以便能够按照您想要的方式查询数据。
希望这可以帮助。