1

サンプル データ: 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いますが、頭の中でロジックをうまくまとめることができません。何かお手伝いできることがありましたら、お知らせください。いつものように、クエリ全体は非常に大きいため、ここには含めていませんが、必要に応じて編集します。前もって感謝します。

4

2 に答える 2

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 に答える
2

MAX()case ステートメントの前後に aGROUP 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 に答える