【问题标题】:MS SQL case then statement with more than one columnMS SQL case then 语句包含多于一列
【发布时间】:2018-09-07 20:11:16
【问题描述】:

我想在...的情况下返回多列然后 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,状态 1,第 147 行 ',' 附近的语法不正确。

【问题讨论】:

  • 根据您的表名,我认为您可能想提出一个合并这些 USER_<month>_<day> 表的策略,然后使用合并的数据集,这样您就不会每次都在打这场仗月。

标签: sql-server


【解决方案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

【讨论】:

  • 谢谢,如果我想要更多字段,我必须再次重复。我可以使用另一种方法吗?如果那样的话,我的情况会更好吗?
  • IF THEN 用于流量控制,不用于查询。恐怕我没有其他办法了
【解决方案2】:

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 个返回值,所以我假设 '' 应该为两列返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多