是否可以为列名设置别名,然后在CASE语句中使用它?例如,
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
我正在尝试对列进行别名,因为实际上我的CASE语句将以编程方式生成,并且我希望在SQL中指定case语句使用的列,而不是必须将另一个参数传递给程序。
答案 0 :(得分:57)
此:
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 :(得分:40)
我认为MySql和MsSql不会允许这样做,因为他们会尝试在WHE子句中查找CASE子句中的所有列作为表的列。
我不知道你在谈论什么DBMS,但我猜你可以在任何DBMS中做这样的事情:
SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
SELECT col1 as a FROM table
) q
答案 2 :(得分:4)
@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
答案 3 :(得分:2)
它应该工作。试试这个
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
答案 4 :(得分: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
答案 5 :(得分:1)
是的,你只需要添加一个括号:
SELECT col1 as a, (CASE WHEN a = 'test' THEN 'yes' END) as value FROM table;
答案 6 :(得分:0)
不在MySQL中。我试过了,我收到以下错误:
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
答案 7 :(得分: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 ...那么col1就可以了
答案 8 :(得分:0)
如果你只写同等条件: 选择Case columns1当为0时,则为'Value1' 当1然后'Value2'否则'Unknown'结束
如果你想写更大,更少或相等,你必须这样做: 选择案例当[ColumnsName]&gt; 0然后'value1'当[ColumnsName] = 0或[ColumnsName]&lt; 0然后 “值” 其他 'Unkownvalue'End结束
来自tablename
由于 Mr.Buntha Khin
答案 9 :(得分: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
答案 10 :(得分:0)
在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;