MS SQL case语句然后包含多个列

时间:2018-09-07 12:01:54

标签: sql-server

我想在...的情况下返回多列,然后col1,col2,col3 或使用*。

我的查询是:

 select a.param1, case
              when b.param1 is not null then  b.loc_ID , 'july'
              when c.param1 is not null then c.loc_ID , 'may'
              else ''
              end
  from [dbo].[table1] a
  left join [dbo].[USERS_7_30] b
  on a.param1 = b.pram1
  left join [dbo].[USERS_6_30] c
  on a.param1 = c.pram1

我收到以下答复:

  

第102层15州第147行的消息   ','附近的语法不正确。

2 个答案:

答案 0 :(得分:1)

您需要在声明时使用单独的大小写

select a.param1, 
              case
              when b.param1 is not null then b.loc_ID 
              when c.param1 is not null then c.loc_ID 
              else ''
              end,
              case
              when b.param1 is not null then 'july'
              when c.param1 is not null then 'may'
              else ''
              end
  from [dbo].[table1] a
  left join [dbo].[USERS_7_30] b
  on a.param1 = b.pram1
  left join [dbo].[USERS_6_30] c
  on a.param1 = c.pram1

答案 1 :(得分:1)

这不是CASE 表达式的工作方式。 CASE表达式只能返回单个标量值。您将必须使用多个表达式:

SELECT a.param1,
       CASE WHEN b.param1 IS NOT NULL THEN b.loc_ID WHEN c.param1 IS NOT NULL THEN c.loc_ID ELSE '' END AS loc_id,
       CASE WHEN b.param1 IS NOT NULL THEN 'July' WHEN c.param1 IS NOT NULL THEN 'May' ELSE '' END AS loc_id
FROM [dbo].[table1] a
     LEFT JOIN [dbo].[USERS_7_30] b ON a.param1 = b.pram1
     LEFT JOIN [dbo].[USERS_6_30] c ON a.param1 = c.pram1;

您的ELSE仅具有1个返回值,因此我假设 ''都应为这两列返回。