我有一个需要帮助的查询:
Select convert(char(2), IncTime, 108) AS Hours, ISNULL(COUNT(IncNo),0) as 'Zone1'
From tblClosedCases
where IncDate between '01/01/2017' and '01/07/2017' and Zone = 'Zone1'
Group by convert(char(2), IncTime, 108)
tblClosedCases当然包含我用作行的内容。 tblClosedCases也有一个区域。我正在使用的当前DB的值分别为Zone1,Zone2,Zone3,Zone4。
用户可以将字段“区域”值更改为Z1到ABC123之间的任何值,并且可以从2个区域变化到20个区域。
是否有一种创建选择查询的方法,无论字段值或字段数如何,我都会以列名作为客户输入的值来得到类似的结果?
Hours Zone1 Zone2 Zone3
00 22 5 15
01 34 21 14
02 41 9 9
等
我知道您需要更多信息,但我不确定还有什么。
任何帮助将不胜感激。
答案 0 :(得分:0)
(应该是评论,但我的声誉不足以发表评论)
您在下面引用的语句是什么意思-在您的示例中Z1到ABC123在哪里适合,这些区域名称是什么?不同的表将具有不同名称的列数吗?如果是这样,则需要动态sql,这与所使用的数据库引擎无关。
您在数据透视查询中要做的事情的核心,而典型的实现方式就像
sum(case when zone='Zone 1' then Incno else 0 end) as 'Zone 1',
sum(case when zone='Zone 2' then Incno else 0 end) as 'Zone 2'. . .
sum(case when zone='Zone N' then Incno else 0 end) as 'Zone N',
使用如显示的分组。但这取决于知道列的名称以及编写查询时有多少列。
用户可以将字段“区域”值更改为Z1到ABC123之间的任何值,并且可以从2个区域变化到20个区域。
如果您将在单个代码块中具有不同的列,则它将是动态sql,并且应为数据库产品添加标签“ dynamic-sql”和标签