SQL:用于CASE语句的别名列名

时间:2009-10-18 00:37:32

标签: sql

是否可以为列名设置别名,然后在CASE语句中使用它?例如,

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

我正在尝试对列进行别名,因为实际上我的CASE语句将以编程方式生成,并且我希望在SQL中指定case语句使用的列,而不是必须将另一个参数传递给程序。

11 个答案:

答案 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;