是否可以为列名称设置别名,然后在CASE语句中使用该名称?例如,SQL:在CASE语句中使用别名列名称
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
我想别名列,因为其实我的CASE语句将程序生成的,我想是case语句使用在SQL中指定,而不必通过其他参数列到程序。
是否可以为列名称设置别名,然后在CASE语句中使用该名称?例如,SQL:在CASE语句中使用别名列名称
SELECT col1 as a, CASE WHEN a = 'test' THEN 'yes' END as value FROM table;
我想别名列,因为其实我的CASE语句将程序生成的,我想是case语句使用在SQL中指定,而不必通过其他参数列到程序。
我认为MySql和MsSql不会允许这样做,因为他们会尝试查找CASE子句中的所有列作为列o f WHERE子句中的表。
我不知道是什么数据库管理系统,你在说什么,但我想你可以做这样的事情在任何DBMS:
SELECT *, CASE WHEN a = 'test' THEN 'yes' END as value FROM (
SELECT col1 as a FROM table
) q
不在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
返回:
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 ... THEN COL1它作品
此:
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;
...我不知道。
我使用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
WITH语法在Oracle 9i +,SQL Server 2005+和DB2(不支持版本)中受支持。在Oracle和SQL Server的情况下,WITH语法只是内联视图的替代方法。 – 2009-10-18 03:19:24
如果你只写只是同等条件: 选择案例columns1当0,则“值1” 时1然后“值”其他“未知”结束
如果你想写选择大小写当[ColumnsName]> 0然后'value1'当[ColumnsName] = 0或[ColumnsName] < 0然后 'value2' 其他 'Unkownvalue'End
从表名
感谢 先生Buntha Khin
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
它应该工作。试试这个
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
这应该被标记为正确答案! – erbaker 2012-02-22 19:22:47