SQL ORDER BY с CASE с UNION ALL

Запуск PostgreSQL (7.4 и 8.x), и я думал, что это работает, но теперь я получаю ошибки.

Я могу запускать запросы отдельно, и это работает нормально, но если я UNION или UNION ВСЕ это вызывает ошибку.

Это сообщение об ошибке: (Предупреждение: pg_query (): Ошибка запроса: ОШИБКА: столбец «Поле1» не существует ... ЗАКАЗАТЬ ПО СЛУЧАЮ «Поле1» W ...)

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 и просто использую UNION или UNION ALL, это тоже сработает.

Есть идеи?

11
задан Phill Pafford 21 June 2011 в 14:56
поделиться