我想在...的情况下返回多列,然后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行的消息 ','附近的语法不正确。
答案 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个返回值,因此我假设 ''
都应为这两列返回。