[英]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.