2016-02-05 57 views
1

我想基于条件选择基于大小写的列。它工作正常,但我不知道如何返回所选列的正确别名。根据条件选择使用大小写的列 - SQL Server

例如。

If I=1 then 
I should select "L.id" with ColumnAlias as LeadId 
else 
I should select "sl.id" with ColumnAlias as ServiceLeadId 

我的输出应该只包含一个具有适当别名的列,如下所示。

If I=1 

LeadId 
1 
2 
3 
... 
... 

If I<>1 

ServiceleadId 
1001 
1002 
1003 
... 
... 

我试着像下面

select 
CASE WHEN @i = 1 Then 
        L.Id AS LeadId 
       Else 

        sl.id AS ServiceLeadId 
end 
from table 

,但我得到了一个错误。

请给我任何想法来实现这一点。

+0

*“但我得到一个错误” *会是过分的要求,包括你在你的问题得到了什么错误? –

+0

任何特定查询将始终生成具有相同“形状”的结果集 - 列数,其名称*和类型。 –

回答

2

CASE返回在1列结果,因此它只能容纳1个名,例如:如果你想有2个不同的列名,你应该有单独的列

SELECT CASE WHEN @i = 1 THEN L.Id ELSE sl.id END AS LeadId 
FROM TblName 

SELECT CASE WHEN @i = 1 THEN L.Id END AS LeadId, 
     CASE WHEN @i <> 1 THEN sl.id END AS ServiceLeadId 
FROM TblName 

UPDATE

根据您的意见,您可以使用IF,而不是CASE,是这样的:

DECLARE @i int = 1 

IF (@i = 1) 
BEGIN 
    SELECT L.Id AS LeadId 
    FROM TblName 
END 
ELSE 
    SELECT sl.id AS ServiceLeadId 
    FROM TblName 
+0

它只返回一列我知道,但我只需要根据条件 – StackUser

+0

@NewUser检查更新的答案动态别名一列。 –

+0

是否可以在单个SQL中执行 – StackUser