Условный запрос с использованием поля «AS» - PullRequest
1 голос
/ 03 марта 2020
SELECT "public"."mv_tags_per_org"."count" AS "count", "public"."mv_tags_per_org"."tag_name" AS "Tag Name",
CASE 
    WHEN "public"."mv_tags_per_org"."ngo_id" = 30 then 'SSS'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 33 then 'PF'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 34 then 'DS'
    ELSE 'Maybe'
END AS "NPO"
FROM "public"."mv_tags_per_org"

WHERE "NPO???" = "SSS"

Вы можете увидеть мой код. В настоящее время он возвращает именно тот вывод, который мне нужен, когда вы удаляете функцию «ГДЕ». Я добавляю функцию «ГДЕ» и пытаюсь получить доступ к новому столбцу под названием «НПО». Кажется, что столбец не существует для редактора SQL, но он существует, когда выполняется запрос. Как мне получить к нему доступ?

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Заключите ваш запрос в «табличное выражение», чтобы вы могли создать именованный столбец. Затем вы можете использовать его в предложении WHERE:

select *
from ( -- table expression 'x' starts here
  SELECT
    "public"."mv_tags_per_org"."count" AS "count",
    "public"."mv_tags_per_org"."tag_name" AS "Tag Name",
  CASE 
    WHEN "public"."mv_tags_per_org"."ngo_id" = 30 then 'SSS'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 33 then 'PF'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 34 then 'DS'
    ELSE 'Maybe'
  END AS "NPO"
  FROM "public"."mv_tags_per_org"
) x
WHERE "NPO" = 'SSS'

Примечание : «выражения таблиц» также называются «производными таблицами» и «встроенными представлениями» различными группами людей. .

0 голосов
/ 03 марта 2020

Предложение WHERE не может относиться к псевдониму столбца, определенному в предложении SELECT (поскольку первое оно оценивается перед последним).

Это на самом деле не имеет значения для вашего случая использования, который может быть упрощен как:

SELECT 
    "public"."mv_tags_per_org"."count" AS "count",    
    "public"."mv_tags_per_org"."tag_name" AS "Tag Name",
CASE 
    WHEN "public"."mv_tags_per_org"."ngo_id" = 30 then 'SSS'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 33 then 'PF'
    WHEN "public"."mv_tags_per_org"."ngo_id" = 34 then 'DS'
    ELSE 'Maybe'
END AS "NPO"
FROM "public"."mv_tags_per_org"
WHERE "public"."mv_tags_per_org"."ngo_id" = 30
...