2016-11-14 55 views
0

无论如何,我可以通过CASE语句中的THEN子句更改列名称。这是我的代码的外观,但它不起作用。SQL CASE语句更改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 

我想这个结果

My Ideal Result

这是可以实现的?如果是这样如何?

+0

你有几个嵌套'CASE'语句,语法是错误的。你能通过样本数据向我们展示你在这里做什么? –

+0

你想在'UPDATE'语句中做所有这些吗? – dotnetom

+0

我已经更新了这个问题,希望这会有所帮助 –

回答

2

不,这是不可能的......如果你问在结果集动态修改列名。

CASE表达式返回。要指定结果集中的列名称,请分配一个别名。

SELECT CASE ... END AS mycolname 
     , ... 
    FROM ... 

列名称是在解析和准备语句时确定的。该语句的执行不能修改列名称。


(这是可能的话我不明白这个问题。目前还不清楚是什么op是绑来实现的。)

+0

我看到了谢谢,但是您有任何选择我可以这样做解决此问题吗? –

+0

我已经知道解决此问题的一件事是通过使用动态查询,但我试图避免这些事情。 –

+0

@AlvinQuezon:一种选择是执行SELECT语句的*外*条件测试。编写两个单独的SELECT语句,并将不同的别名分配给该列。并让条件测试决定执行两个SELECT语句中的哪一个。 – spencer7593

0

我消化不了你的SELECT语句,但承担其内嵌的情况下

SELECT item_name = CASE WHEN item_name = 'sometext' THEN item_id ELSE item_name END AS MyColumnName 
0

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查询的其余部分。