Подтвердить что ты не робот

SQL: имя столбца псевдонима для использования в заявлении CASE

Возможно ли псевдоним имени столбца, а затем использовать его в операторе CASE? Например,

SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;

Я пытаюсь добавить псевдоним в столбец, потому что на самом деле мой оператор CASE будет сгенерирован программно, и я хочу, чтобы столбец, который использует оператор case, должен быть указан в SQL вместо того, чтобы передавать другой параметр в программу.

4b9b3361

Ответ 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