我们可以使用不同的过滤条件在同一个表字段或列上多次使用相同的聚合函数吗?
Posted
技术标签:
【中文标题】我们可以使用不同的过滤条件在同一个表字段或列上多次使用相同的聚合函数吗?【英文标题】:Can we use same aggregate function more than once on same table field or column using Different filter conditions? 【发布时间】:2013-05-04 07:30:26 【问题描述】:我想在查询中的“金额”字段上使用 SUM() 函数在同一字段上使用 4 次不同的过滤器。 类似
SELECT Date1,CC,BU, SUM(Amount),SUM(Amount),SUM(Amount),SUM(Amount)
FROM MainTable<br>
GROUP BY CC,BU,Date1
这里
第一个 SUM(Amount)
应该在 Mode='011'
和 Mode='012'
来自 MainTable 时计算
当 Mode like '03_'
和 Mode Like '05_'
来自 MainTable 时,应计算第二个 SUM(Amount)
当 Mode like '10_'
来自 MainTable 时,应计算第三个 SUM(Amount)
第 4 个 SUM(Amount)
应在 MainTable 中的 (Mode !='011')
和 (Mode !='012')
(Mode not Like '03_')
和 (Mode not Like '05_')
时计算
如何做到这一点?我尝试了很多方法,但无法达到我想要的结果。 请帮帮我。 提前谢谢你。
【问题讨论】:
【参考方案1】:您可以使用带有 CASE
的聚合函数:
SELECT Date1,
CC,
BU,
SUM(case when mode = '011' then Amount end) Mode011,
SUM(case when mode = '012' then Amount end) Mode012,
SUM(case when mode = '013' then Amount end) Mode013,
SUM(case when mode = '014' then Amount end) Mode014
FROM MainTable
GROUP BY CC,BU,Date1;
或者您可以使用 PIVOT 功能:
select date1, CC, BU,
[011] Mode011,
[012] Mode012,
[013] Mode013,
[014] Mode014
from
(
select date1, CC, BU, mode, amount
from maintable
) src
pivot
(
sum(amount)
for mode in ([011], [012], [013], [014])
) piv
【讨论】:
我们可以在使用 AND 运算符的 case 语句中包含 2 个文件管理器吗?比如 (CASE when (mode = '012' And mode='015)' then Amount end) 我也需要使用通配符。有可能吗? @NishantBhuskade 是的,您可以在CASE
中使用多个过滤器,甚至是通配符以上是关于我们可以使用不同的过滤条件在同一个表字段或列上多次使用相同的聚合函数吗?的主要内容,如果未能解决你的问题,请参考以下文章