2011-06-21 9 views
9

PostgreSQL(7.4と8.x)を実行していて、これは動作していたと思っていましたが、今はエラーが発生しています。UNION ALLを使用したCASEのSQL ORDER BY

私は別々にクエリを実行できますが、それは正常に動作しますが、UNIONまたはUNION ALLの場合はエラーがスローされます。

このエラーアウト:(警告:pg_query():クエリに失敗しました:ERROR:列 "フィールド1" が存在しません... ORDER CASE "フィールド1" W BY ...)

SELECT "Field1" AS field_1, "Field2" AS field_2, 
"Field3" AS field_3, "Field4" AS field_4 
FROM "TableName" 
WHERE condition 
AND other_condition 
UNION ALL 
SELECT "Field1" AS field_1, "Field2" AS field_2, 
"Field3" AS field_3, "Field4" AS field_4 
FROM "TableName" 
WHERE yet_another_condition 
AND yet_another_other_condition 
ORDER BY CASE "Field1" 
    WHEN 'A' THEN 1 
    WHEN 'B' THEN 2 
    WHEN 'C' THEN 3 
    ELSE 4 
END 

この作品:

SELECT "Field1" AS field_1, "Field2" AS field_2, 
"Field3" AS field_3, "Field4" AS field_4 
FROM "TableName" 
WHERE yet_another_condition 
AND yet_another_other_condition 
ORDER BY CASE "Field1" 
    WHEN 'A' THEN 1 
    WHEN 'B' THEN 2 
    WHEN 'C' THEN 3 
    ELSE 4 
END 

そして、これは同様に動作します:

SELECT "Field1" AS field_1, "Field2" AS field_2, 
"Field3" AS field_3, "Field4" AS field_4 
FROM "TableName" 
WHERE condition 
AND other_condition 
ORDER BY CASE "Field1" 
    WHEN 'A' THEN 1 
    WHEN 'B' THEN 2 
    WHEN 'C' THEN 3 
    ELSE 4 
END 

と私はORDER BYをオフのままにし、ちょうどすべてのIT UNIONまたはUNIONを使用している場合同様に動作します。

すべてのアイデア?他にすべてをかける

答えて

13

はSELECT:

SELECT * FROM (
    SELECT "Field1" AS field_1, "Field2" AS field_2, 
    "Field3" AS field_3, "Field4" AS field_4 
    FROM "TableName" 
    WHERE condition 
    AND other_condition 
    UNION ALL 
    SELECT "Field1" AS field_1, "Field2" AS field_2, 
    "Field3" AS field_3, "Field4" AS field_4 
    FROM "TableName" 
    WHERE yet_another_condition 
    AND yet_another_other_condition 
) As A 
ORDER BY CASE field_1 
    WHEN 'A' THEN 1 
    WHEN 'B' THEN 2 
    WHEN 'C' THEN 3 
    ELSE 4 
END 

や、より良いを、それはUNIONの終わりに渡されると、ORDER BYでエイリアスを使用します。

SELECT "Field1" AS field_1, "Field2" AS field_2, 
    "Field3" AS field_3, "Field4" AS field_4 
    FROM "TableName" 
    WHERE condition 
    AND other_condition 
    UNION ALL 
    SELECT "Field1" AS field_1, "Field2" AS field_2, 
    "Field3" AS field_3, "Field4" AS field_4 
    FROM "TableName" 
    WHERE yet_another_condition 
    AND yet_another_other_condition 
    ORDER BY CASE field_1 
    WHEN 'A' THEN 1 
    WHEN 'B' THEN 2 
    WHEN 'C' THEN 3 
    ELSE 4 
    END 
+0

Field1が列名ではないために動作しません。 – Benoit

+0

申し訳ありませんが、同じエラー –

+0

はい、気づいた。回答が修正されました.... – CristiC

1

最初のものはありませんあなたは

ORDER BY CASE field_1 

"Field1"を行う必要がありますので、動作しない単一サブクエリでのみ利用可能で、共通の別名でUNIONを作成した後は、その列を"Field1"として参照することはできません。

+0

+1私はこれをしましたが、このエラーが発生します:エラー:UNION/INTERSECT/EXCEPT結果のORDER BYは結果カラムの1つになければなりません –

関連する問題