无论如何,我可以通过CASE STATEMENT中的THEN子句更改列名。这是我的代码看起来如何,但它无法正常工作。
SELECT
CASE
WHEN @IDWeeklySpecial = '107'
THEN
CASE
WHEN ISNULL(v.blnLeftHandDrive, 0) = 1
THEN [HANDEDNESS] = 'LHD'
ELSE [HANDEDNESS] = 'RHD'
ELSE
CASE
WHEN ISNULL(v.blnLeftHandDrive, 0) = 1
THEN STEERING = 'LHD'
ELSE STEERING = 'RHD'
END
END
我想要这个结果
这可以实现吗?如果是这样的话?
答案 0 :(得分:2)
不,这是不可能的...如果您要求动态修改结果集中的列名。
CASE表达式返回值。要在结果集中指定列名,请指定别名。
SELECT CASE ... END AS mycolname
, ...
FROM ...
在解析和准备语句时确定列名。语句的执行无法修改列名。
(我可能不明白这个问题。目前还不清楚OP想要达到的目标。)
答案 1 :(得分:1)
case
是一个表达式。您可以在表达式之前或之后命名列,但不能在中间命名。
此外,SQL语句需要返回一组固定的列,包括列名。
因此,您无法使用简单的SQL语句执行所需操作。您可以使用动态SQL:
declare @sql nvarchar(max);
set @sql = '
SELECT (CASE WHEN COALESCE(v.blnLeftHandDrive, 0) = 1
THEN 'LHD'
ELSE 'RHD'
END) as [columnname]
. . . ';
set @sql = replace(@sql, '[columnname]',
(case when @IDWeeklySpecial = '107' then 'HANDEDNESS' else 'STEERING' end)
);
exec sp_executesql @sql;
请注意,. . .
用于SQL查询的其余部分。
答案 2 :(得分:0)
我无法消化您的select语句,但假设其内联案例
SELECT item_name = CASE WHEN item_name = 'sometext' THEN item_id ELSE item_name END AS MyColumnName
答案 3 :(得分:0)
不可能在查询中分配不同的列名,因为结果集中的所有垂直数据值都属于同一列。
如果您只是在使用CASE表达式时尝试为列名加上别名,请确保在END关键字之后使用AS。其他人提到了这一点,但这是我的问题。将其更改为类似的格式,并且可以正常工作:
CASE
WHEN table1.Name LIKE '%John%' THEN 'Some John Person'
WHEN table1.Name <> 'NULL' THEN table1.Name
ELSE 'Nobody'
END AS NewAliasColumnName