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

SQL:用于CASE语句的别名列名,sql,Sql,是否可以在CASE语句中使用列名别名?比如说, SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table; 我试图给列添加别名,因为实际上我的CASE语句是通过编程生成的,我希望CASE语句使用的列在SQL中指定,而不必向程序传递另一个参数。不在MySQL中。我试过了,但出现了以下错误: ERROR 1054 (42S22): Unknown column 'a' in 'field list' MsSq

是否可以在CASE语句中使用列名别名?比如说,

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

我试图给列添加别名,因为实际上我的CASE语句是通过编程生成的,我希望CASE语句使用的列在SQL中指定,而不必向程序传递另一个参数。

不在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

但是如果我换成情况,当col1。。。然后col1它就可以工作了

我认为MySql和MsSql不允许这样做,因为它们会尝试将CASE子句中的所有列作为WHERE子句中表的列来查找

我不知道您在说什么DBMS,但我想您可以在任何DBMS中执行类似操作:

SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
   SELECT col1 as a FROM table
) q
这:

…将不起作用。此

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 server上的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
  • 如果只写相等条件,则只需: 选择0时的案例列1,然后选择“值1” 当1时,则“值2”否则“未知”结束

  • 如果你想写得更大、更小或相等,你必须这样做:
    选择[ColumnsName]>0时的大小写,然后选择[ColumnsName]=0或[ColumnsName]时的“值1”。试试这个

    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 
    

    在MySql中,alice名称可能不起作用,因此将原始列名放在CASE语句中

     SELECT col1 as a, CASE WHEN col1 = 'test' THEN 'yes' END as value FROM table;
    
    有时上面的查询也可能返回错误,我不知道为什么(我在两台不同的开发机器中遇到了这个问题)。因此,将案例陈述放入“(…)”中,如下所示:

    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;
    

    Oracle 9i+、SQL Server 2005+和DB2(dunno版本)支持WITH语法。在Oracle&SQL Server的情况下,WITH syntax只是内联视图的一种替代方法。也许“a”是一个缓慢的函数,不值得运行两次。如果别名位于临时表上,为什么这不起作用?我尝试在WHERE子句条件中使用别名。这在SQL server中也非常简单…结束为column_name+1
     SELECT col1 as a, CASE WHEN col1 = 'test' THEN 'yes' END as value FROM table;
    
    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;