SQL 分组(按大小写结果)



我在IBM DB2上有一个简单的SQL查询。我正在尝试运行如下内容:

select case when a.custID = 42285 then 'Credit' when a.unitID <> '' then 'Sales' when a.unitID = '' then 'Refund'
else a.unitID end TYPE, sum(a.value) as Total from transactions a
group by a.custID, a.unitID

此查询运行,但是我对group by a.custID有问题 - 我宁愿不要这样做,但除非存在,否则查询不会运行。我想根据CASE函数的结果运行group by函数,而不是它后面的条件池。所以,我看起来像这样:

group by TYPE

但是,添加group by TYPE会报告错误消息"Column or global variable TYPE not found"。此外,从组部分报告中删除a.custID"Column custID or expression in SELECT list not valid"

这是否完全可能,或者我是否需要查看我的CASE函数并避免使用custID列,因为目前我也基于custID列进行分组,即使它不存在SELECT

我理解为什么分组会这样工作,我只是想知道是否有可能摆脱custID分组,但仍将其保留在CASE函数中。

如果你想要简洁的代码,你可以在这里使用一个子查询:

SELECT TYPE, SUM(value) AS Total
FROM
(
SELECT CASE WHEN a.custID = 42285 THEN 'Credit'
WHEN a.unitID <> ''   THEN 'Sales'
WHEN a.unitID = ''    THEN 'Refund'
ELSE a.unitID END TYPE,
value
FROM transactions a
) t
GROUP BY TYPE;

另一种方法是在GROUP BY子句中重复CASE表达式,这很丑陋,但应该仍然有效。 请注意,某些数据库(例如MySQL(具有重载GROUP BY并且至少在某些情况下允许使用别名。

相关内容

最新更新