答案 0 :(得分:2)
您可以尝试使用CASE
,当'A-B'
为class
或'A'
时返回'B'
。
SELECT CASE
WHEN class IN ('A', 'B') THEN
'A-B'
ELSE
class
END class,
sum(budget)
FROM elbat
GROUP BY CASE
WHEN class IN ('A', 'B') THEN
'A-B'
ELSE
class
END;
答案 1 :(得分:1)
我相信达到此目的的最佳方法是使用CASE语句。
在此处查看文档:{{3}}
例如
SELECT CASE WHEN CLASS IN ('A','B') THEN 'A-B'
ELSE CLASS
END AS GROUPED_CLASS,
SUM(BUDGET)
FROM budgets
GROUP BY GROUPED_CLASS
以上查询应会为您提供所需的内容。
答案 2 :(得分:1)
这里有2种方法...首先是使用case语句,如其他人所说。这是一个基于代码的解决方案,这意味着如果将来有更改,您需要在代码中进行更改(如果在其他地方使用此逻辑,则需要在多个报表上进行更改)。
替代方法是创建一个管理此关系的表。创建一个具有两列class和display_name的表(我将调用dim_class),并使用该表管理关系。
类,显示名称
A,a-b
B,a-b
C,C
Select display_name, sum(budget)
From class inner join dim_class on class.class = dim_class
Group by display_name
如果这是一个快照代码,则id带有一个快速的case语句。如果您正在重用逻辑或有很多类,则该表将更易于维护。您还可以将它们放入的水桶加倍...
类,显示名称
A,a-b
B,a-b
C,仅c
A,c和a
C,c和a