是否可以为列名添加别名,然后在CASE语句中使用它?例如,
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
Run Code Online (Sandbox Code Playgroud)
我试图别名列,因为实际上我的CASE语句将以编程方式生成,我希望在SQL中指定case语句使用的列,而不是必须将另一个参数传递给程序.
OMG*_*ies 59
这个:
SELECT col1 as a,
CASE WHEN a = 'test' THEN 'yes' END as value
FROM table;
Run Code Online (Sandbox Code Playgroud)
...... 不行.这将:
SELECT CASE WHEN a = 'test' THEN 'yes' END as value
FROM (SELECT col1 AS a
FROM TABLE)
Run Code Online (Sandbox Code Playgroud)
为什么你不会使用:
SELECT t.col1 as a,
CASE WHEN t.col1 = 'test' THEN 'yes' END as value
FROM TABLE t;
Run Code Online (Sandbox Code Playgroud)
...我不知道.
eKe*_*ek0 45
我认为MySql和MsSql不允许这样做,因为他们将尝试在WHERE子句中查找CASE子句中的所有列作为表的列.
我不知道你在谈论什么DBMS,但我想你可以在任何DBMS中做这样的事情:
SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
SELECT col1 as a FROM table
) q
Run Code Online (Sandbox Code Playgroud)
小智 5
@OMG Ponies - 我不使用以下代码的原因之一
SELECT t.col1 as a,
CASE WHEN t.col1 = 'test' THEN 'yes' END as value
FROM TABLE t;
Run Code Online (Sandbox Code Playgroud)
可能是 t.col1 不是表中的实际列。例如,它可以是来自 XML 列的值,如
Select XMLColumnName.value('(XMLPathOfTag)[1]', 'varchar(max)')
as XMLTagAlias from Table
Run Code Online (Sandbox Code Playgroud)