SQL:用于CASE语句的别名列名
是否可以在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
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小马-我不使用以下代码的原因之一
可能是t.col1不是表中的实际列。例如,它可以是XML列中的值,如SELECT t.col1 as a, CASE WHEN t.col1 = 'test' THEN 'yes' END as value FROM TABLE t;
让它变得如此简单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+1SELECT 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;