簡體   English   中英

SQL:用於 CASE 語句的別名列名

[英]SQL: Alias Column Name for Use in CASE Statement

是否可以為列名添加別名,然后在 CASE 語句中使用它? 例如,

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

我正在嘗試為該列設置別名,因為實際上我的 CASE 語句將以編程方式生成,並且我希望在 SQL 中指定 case 語句使用的列,而不必將另一個參數傳遞給程序。

這:

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;

...我不知道。

我認為 MySql 和 MsSql 不允許這樣做,因為它們會嘗試將 CASE 子句中的所有列查找為 WHERE 子句中表的列。

我不知道你在說什么 DBMS,但我想你可以在任何 DBMS 中做這樣的事情:

SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
   SELECT col1 as a FROM table
) q

@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

它應該工作。 試試這個

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

我使用 CTE 來幫助編寫復雜的 SQL 查詢,但並非所有 RDBMS 都支持它們。 您可以將它們視為查詢范圍視圖。 這是 SQL 服務器上 t-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
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

在 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 它可以工作

  • 如果你只寫相等的條件: Select Case columns1 When 0 then 'Value1' when 1 then 'Value2' else 'Unknown' End

  • 如果你想寫更大,小於或等於你必須這樣做: Select Case When [ColumnsName] >0 then 'value1' When [ColumnsName]=0 Or [ColumnsName]<0 then 'value2' Else 'Unkownvalue' End

從表名

感謝 Buntha Khin 先生

在MySql中,alice名稱可能不起作用,因此將原始列名放在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;

是的,您只需要添加一個括號:

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

在 MySQL 中沒有。 我試過了,出現以下錯誤:

ERROR 1054 (42S22): Unknown column 'a' in 'field list'

讓它變得如此簡單。

select columnnameshow = (CASE tipoventa
when 'CONTADO' then 'contadito'
when 'CREDITO' then 'cred'
else 'no result'
end) from Promocion.Promocion 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM