示例数据:Oracle 10g
Number Activity
1 x Activity
1 no activity
2 x activity
3 no activity
我需要做的是生成没有活动或x活动的行,然后出现问题:如果有一个同时具有x活动且没有活动的ID,我只想生成x活动行。可以吗?以下是生成上述数据的CASE
语句:
CASE WHEN DSKMTB_ACTIVITY_TYPE.ACTIVITY_TYPE_LABEL IS NULL
THEN 'No Activity'
ELSE DSKMTB_ACTIVITY_TYPE.ACTIVITY_TYPE_LABEL
END AS "Activity Type"
我在想我需要嵌套一个CASE
语句,但我无法在脑海中收集逻辑。如果有任何我可以提供的帮助,请告诉我。按照惯例,我没有在这里包含整个查询,因为它非常大,但如果有人觉得有必要会进行编辑。提前谢谢。
答案 0 :(得分:2)
您可以在案例陈述中放置MAX()
而在ID字段上放置GROUP BY
。
MAX(CASE WHEN DSKMTB_ACTIVITY_TYPE.ACTIVITY_TYPE_LABEL IS NULL
THEN 'No Activity'
ELSE DSKMTB_ACTIVITY_TYPE.ACTIVITY_TYPE_LABEL
END) AS "Activity Type"
GROUP BY ID
答案 1 :(得分:2)
通过ID和过滤分组,您可以通过它:
SELECT
CASE
WHEN MAX(NVL(a.ACTIVITY_TYPE_LABEL, 'aaaa')) = 'aaaa'
THEN 'No Activity'
ELSE a.ACTIVITY_TYPE_LABEL
END AS "Activity Type"
FROM DSKMTB_ACTIVITY_TYPE a
GROUP BY a.id
问题是,如果您实际选择了其他字段,它可能会破坏GROUP BY
,我们将不得不创建子查询。