编写查询需要一些帮助。假设我使用的是sales
表,如下所示:
trans_id item_number sales
1 1 10
1 11 5
2 11 3
2 13 4
我希望我的输出包含trans_id
、交易的总销售额和Y/N标志其可以由该情况语句确定:CCD_ 3。
但是,我需要在聚合级别应用该标志,如果至少有一个项目具有"Y"标志,那么整个事务应该包括'Y'
标志。如果没有项目具有'Y'
标志,则整个事务应标记为'N'
。输出应该基本上看起来像:
trans_id flag sales
1 'Y' 15
2 'N' 7
下面的查询几乎让我达到了目的,但我必须将其用作子查询给我预期的结果。是否可以修改CASE
语句或使用一些其他方法,以便我可以在相同的SELECT
内获得所需的结果语句(即不使用下面的查询作为子查询(?
SELECT trans_id
, CASE WHEN item_number BETWEEN 1 AND 10 THEN 'Y' ELSE 'N' END
, SUM(sales)
FROM sales
GROUP BY trans_id, item_number
您可以使用max()
:
select trans_id,
max(case when item_number between 1 and 10 then 'Y' else 'N' end),
sum(sales)
from sales
group by trans_id;
对于'Y'
和'N'
,MAX()
充当聚合OR运算。MIN()
将是一个聚合AND——也就是说,所有项目编号都在该范围内。