是否可以爲列名稱設置別名,然後在CASE語句中使用該名稱?例如,SQL:在CASE語句中使用別名列名稱
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
我想別名列,因爲其實我的CASE語句將程序生成的,我想是case語句使用在SQL中指定,而不必通過其他參數列到程序。
是否可以爲列名稱設置別名,然後在CASE語句中使用該名稱?例如,SQL:在CASE語句中使用別名列名稱
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
我想別名列,因爲其實我的CASE語句將程序生成的,我想是case語句使用在SQL中指定,而不必通過其他參數列到程序。
我認爲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
不在MySQL中。我嘗試了,我得到了以下錯誤:
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
也不在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 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;
...我不知道。
我使用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
WITH語法在Oracle 9i +,SQL Server 2005+和DB2(不支持版本)中受支持。在Oracle和SQL Server的情況下,WITH語法只是內聯視圖的替代方法。 – 2009-10-18 03:19:24
如果你只寫只是同等條件: 選擇案例columns1當0,則「值1」 時1然後「值」其他「未知」結束
如果你想寫選擇大小寫當[ColumnsName]> 0然後'value1'當[ColumnsName] = 0或[ColumnsName] < 0然後 'value2' 其他 'Unkownvalue'End
從表名
感謝 先生Buntha Khin
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
它應該工作。試試這個
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
@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
使它變得如此簡單。
select columnnameshow = (CASE tipoventa
when 'CONTADO' then 'contadito'
when 'CREDITO' then 'cred'
else 'no result'
end) from Promocion.Promocion
這應該被標記爲正確答案! – erbaker 2012-02-22 19:22:47