SQL: имя столбца псевдонима для использования в заявлении CASE
Возможно ли псевдоним имени столбца, а затем использовать его в операторе CASE? Например,
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
Я пытаюсь добавить псевдоним в столбец, потому что на самом деле мой оператор CASE будет сгенерирован программно, и я хочу, чтобы столбец, который использует оператор case, должен быть указан в SQL вместо того, чтобы передавать другой параметр в программу.
Ответы
Ответ 1
Я думаю, что MySql и MsSql не позволят этого, потому что они попытаются найти все столбцы в предложении CASE в виде столбцов таблиц в предложении WHERE.
Я не знаю, о какой СУБД вы говорите, но я думаю, вы могли бы сделать что-то подобное в любой СУБД:
SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
SELECT col1 as a FROM table
) q
Ответ 2
Это:
SELECT col1 as a,
CASE WHEN a = 'test' THEN 'yes' END as value
FROM table;
... будет не работать. Этот будет:
SELECT CASE WHEN a = 'test' THEN 'yes' END as value
FROM (SELECT col1 AS a
FROM TABLE)
Почему вы не использовали:
SELECT t.col1 as a,
CASE WHEN t.col1 = 'test' THEN 'yes' END as value
FROM TABLE t;
... Я не знаю.
Ответ 3
@OMG Ponies - одна из моих причин не использовать следующий код
SELECT t.col1 as a,
CASE WHEN t.col1 = 'test' THEN 'yes' END as value
FROM TABLE t;
может быть, что t.col1 не является фактическим столбцом в таблице. Например, это может быть значение из столбца XML, например
Select XMLColumnName.value('(XMLPathOfTag)[1]', 'varchar(max)')
as XMLTagAlias from Table
Ответ 4
Он должен работать. Попробуйте это
Select * from
(select col1, col2, case when 1=1 then 'ok' end as alias_col
from table)
as tmp_table
order by
case when @sortBy = 1 then tmp_table.alias_col end asc
Ответ 5
Я использую CTE, чтобы помочь составить сложные SQL-запросы, но не все RDBMS их поддерживают. Вы можете рассматривать их как виды области запроса. Вот пример в t-sql на SQL-сервере.
With localView1 as (
select c1,
c2,
c3,
c4,
((c2-c4)*(3))+c1 as "complex"
from realTable1)
, localView2 as (
select case complex WHEN 0 THEN 'Empty' ELSE 'Not Empty' end as formula1,
complex * complex as formula2
from localView1)
select *
from localView2
Ответ 6
Не в MySQL. Я попробовал, и я получаю следующую ошибку:
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
Ответ 7
Не в MsSql
SELECT col1 AS o, e = CASE WHEN o < GETDATE() THEN o ELSE GETDATE() END
FROM Table1
Возврат:
Msg 207, Level 16, State 3, Line 1
Invalid column name 'o'.
Msg 207, Level 16, State 3, Line 1
Invalid column name 'o'.
Однако, если я перейду на CASE WHEN col1... THEN col1, он работает
Ответ 8
-
Если вы пишете только равные условия:
Выберите столбцы Case1 Когда 0, то "Value1"
когда 1, затем "Value2" else "Unknown" End
-
Если вы хотите написать больше, Меньше или равно, вы должны сделать следующее:
Выберите случай, когда [ColumnsName] > 0, затем "value1" Когда [ColumnsName] = 0 или [ColumnsName] < 0 then
"Значение2"
еще
"Unkownvalue" End
Из tablename
Спасибо
Г-н Бунтха Хин
Ответ 9
SELECT
a AS [blabla a],
b [blabla b],
CASE c
WHEN 1 THEN 'aaa'
WHEN 2 THEN 'bbb'
ELSE 'unknown'
END AS [my alias],
d AS [blabla d]
FROM mytable
Ответ 10
В MySql имя Алисы может не работать, поэтому поместите оригинальное имя столбца в оператор CASE
SELECT col1 as a, CASE WHEN col1 = 'test' THEN 'yes' END as value FROM table;
Иногда вышеупомянутый запрос также может возвращать ошибку, я не знаю почему (я столкнулся с этой проблемой на двух разных машинах разработки). Поэтому поместите оператор CASE в "(...)", как показано ниже:
SELECT col1 as a, (CASE WHEN col1 = 'test' THEN 'yes' END) as value FROM table;
Ответ 11
сделать так легко.
select columnnameshow = (CASE tipoventa
when 'CONTADO' then 'contadito'
when 'CREDITO' then 'cred'
else 'no result'
end) from Promocion.Promocion