2015-09-22 110 views
0

有没有办法使用CASE语句在select语句中显示某些列?使用case语句显示select语句中的某些列

目前我使用下面的SQL做到这一点

BEGIN 
IF(@ISUSERROLE = 1) 
    SELECT 
    t  PONumber      = [RAH_PONumber] 
      ,RAType      = rt.[RAT_Type] 
      ,ChargeableAmount    = [RAH_ChargeableAmount] 
    FROM [T_RA_Header] rh 
    INNER JOIN dbo.T_RA_Type rt ON rt.RAT_ID = rh.[RAH_RAT_ID] 
    INNER JOIN dbo.T_RA_Status rs ON rs.RAS_ID = rh.[RAH_RAS_ID] 
    WHERE 
      rh.RAH_RAI_ID = @RAI_ID 

    ELSE IF (@ISUSERROLE = 2) 
      SELECT 
      PONumber      = [RAH_PONumber] 
      ,RANumber      = [RAH_RANumber] 
      ,RAType      = rt.[RAT_Type] 
      ,RAStatus      = rs.RAS_Status 
      ,RAUploadedBy     = [RAH_UploadedByUserName] 
      ,UploadedOn     = [RAH_UploadedOn] 
      ,ChargeableAmount    = [RAH_ChargeableAmount] 

    FROM [T_RA_Header] rh 
    INNER JOIN dbo.T_RA_Type rt 
      ON rt.RAT_ID = rh.[RAH_RAT_ID] 
    INNER JOIN dbo.T_RA_Status rs 
      ON rs.RAS_ID = rh.[RAH_RAS_ID] 
    WHERE 
      rh.RAH_RAI_ID = @RAI_ID 
END 

从这个是否有可能使用CASE语句?或者是我所做的唯一方法

+0

标签您与您正在使用的数据库的问题(这大概是SQL服务器)。 –

回答

2

SQL查询返回一组明确定义的列。尽管可以更改内容,但不能更改列的数量,类型或名称。

CASE是一个返回单个值的表达式,该值可以是结果集中的一列。

因此,您不能使用CASE来更改列数。

您唯一的选择是动态SQL,您可以在查询字符串中设置所需列,然后执行查询字符串。

+0

啊,好的。谢谢 – Blahwoo

0

case

declare @ISUSERROLE int = 1 
declare @select_1 varchar(2000) 
declare @select_2 varchar(2000) 
declare @main_sql varchar(4000) 
declare @final_set varchar(8000) 

set @select_1 = 'PONumber = [RAH_PONumber], 
       RAType = rt.[RAT_Type], 
       ChargeableAmount = [RAH_ChargeableAmount]' 

set @select_2 = 'PONumber= [RAH_PONumber], 
       RANumber= [RAH_RANumber], 
       RAType = rt.[RAT_Type], 
       RAStatus= rs.RAS_Status, 
       RAUploadedBy= [RAH_UploadedByUserName], 
       UploadedOn= [RAH_UploadedOn], 
       ChargeableAmount = [RAH_ChargeableAmount]' 

set @main_sql = ' FROM [T_RA_Header] rh 
       INNER JOIN dbo.T_RA_Type rt 
       ON rt.RAT_ID = rh.[RAH_RAT_ID] 
       INNER JOIN dbo.T_RA_Status rs 
       ON rs.RAS_ID = rh.[RAH_RAS_ID] 
       WHERE 
       rh.RAH_RAI_ID = '+convert(varchar,@RAI_ID)+'' 


set @final_set = 'select '+case when @ISUSERROLE = 1 then @select_1 else @select_2 [email protected]_sql 
--print @final_set 
exec (@final_set)