2009-10-18 48 views
30

是否可以爲列名稱設置別名,然後在CASE語句中使用該名稱?例如,SQL:在CASE語句中使用別名列名稱

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

我想別名列,因爲其實我的CASE語句將程序生成的,我想是case語句使用在SQL中指定,而不必通過其他參數列到程序。

回答

28

我認爲MySql和MsSql不會允許這樣做,因爲他們會嘗試查找CASE子句中的所有列作爲列o f WHERE子句中的表。

我不知道是什麼數據庫管理系統,你在說什麼,但我想你可以做這樣的事情在任何DBMS:

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

不在MySQL中。我嘗試了,我得到了以下錯誤:

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

也不在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它作品

47

此:

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; 

...我不知道。

+1

這應該被標記爲正確答案! – erbaker 2012-02-22 19:22:47

1

我使用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 
+1

WITH語法在Oracle 9i +,SQL Server 2005+和DB2(不支持版本)中受支持。在Oracle和SQL Server的情況下,WITH語法只是內聯視圖的替代方法。 – 2009-10-18 03:19:24

0
  • 如果你只寫只是同等條件: 選擇案例columns1當0,則「值1」 時1然後「值」其他「未知」結束

  • 如果你想寫選擇大小寫當[ColumnsName]> 0然後'value1'當[ColumnsName] = 0或[ColumnsName] < 0然後 'value2' 其他 'Unkownvalue'End

從表名

感謝 先生Buntha Khin

0
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 
1

它應該工作。試試這個

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 
2

@OMG小馬 - 我的一個不使用下面的代碼

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 columnnameshow = (CASE tipoventa 
when 'CONTADO' then 'contadito' 
when 'CREDITO' then 'cred' 
else 'no result' 
end) from Promocion.Promocion