0

dLoadがGROUPBY行の無効な識別子である理由を誰かに説明してもらえますか?これはMysqlで正常に実行されますが、Oracleで動作させることができません。

CREATE OR REPLACE VIEW DoctorsLoad AS
    SELECT dID, gender, specialty, 'Overloaded' AS dLoad
    FROM Doctor D, Examine E
    WHERE D.dID = E.doctor_id
    GROUP BY dID, gender, specialty, dLoad
    HAVING COUNT(*) > 10
    UNION
    SELECT dID, gender, specialty, 'Underloaded' AS dLoad
    FROM Doctor D, Examine E
    WHERE D.dID = E.doctor_id
    GROUP BY dID, gender, specialty, dLoad
    HAVING COUNT(*) <= 10;
4

1 に答える 1

3

Oracle RDMS では、句でエイリアスを使用できませんが、GROUP BY'Overloaded' のようなリテラルの場合は、グループ by に含める必要はありません。

CREATE OR REPLACE VIEW DoctorsLoad AS
    SELECT dID, gender, specialty, 'Overloaded' AS dLoad
    FROM Doctor D, Examine E
    WHERE D.dID = E.doctor_id
    GROUP BY dID, gender, specialty
    HAVING COUNT(*) > 10
    UNION ALL
    SELECT dID, gender, specialty, 'Underloaded' AS dLoad
    FROM Doctor D, Examine E
    WHERE D.dID = E.doctor_id
    GROUP BY dID, gender, specialty
    HAVING COUNT(*) <= 10;

UNION ALLまた、フィルター操作を回避して重複行を削除する を使用することをお勧めします。

于 2013-02-16T17:17:10.430 に答える