1

示例数据:Oracle 10g

Number    Activity
1         x Activity
1         no activity
2         x activity
3         no activity

我需要做的是生成没有活动或 x 活动的行,那么问题来了:如果有一个 ID 有 x 活动和没有活动,我只想生成 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语句,但我无法完全收集我脑海中的逻辑。请让我知道是否有任何我可以提供的帮助。按照惯例,我没有在此处包含整个查询,因为它非常大,但如果有人认为有必要,我会进行编辑。提前致谢。

4

2 回答 2

2

您可以MAX()在 case 语句周围放置 a,而不是GROUP BY在 ID 字段上放置 a。

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
于 2013-03-15T13:50:55.717 回答
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,我们将不得不做一个子查询。

于 2013-03-15T13:54:15.630 回答