【问题标题】:Using case and group-by at the same time同时使用 case 和 group-by
【发布时间】:2020-12-14 18:15:10
【问题描述】:

我想在SQL中使用case,同时也使用正确的group by

SELECT patientname, patientid, cancerstatus,    
  CASE
    WHEN cancerstatus IS NOT NULL THEN 'In surgery'
    WHEN cancerstatus IS NULL THEN 'no surgery needed'        
  END case
FROM database (nolock)
WHERE biopsydate BETWEEN '2020-08-25' AND '2020-08-26'
GROUP BY patientname, patientID

所以我想要一个案例表达,将每个接受过癌症活检的患者归入是否需要手术的类别,并且我还想使用患者 ID 和姓名对患者进行分组(这两个标准是必须的)。

case 部分显示错误,我做错了什么?

【问题讨论】:

  • 您可以将'no surgery needed' 放在ELSECASE 部分中——您不需要对其进行测试,因为第一个测试是is not null

标签: sql sql-server group-by case


【解决方案1】:

你需要在group by中重复case,我认为:

SELECT patientname, patientid,
       (CASE WHEN PJMPSID is not null, THEN 'In surgery'
             WHEN cancerstatus is null then 'no surgery needed'    
        END) as status
FROM database
WHERE biopsydate between '2020-08-25' and '2020-08-26'
GROUP BY patientname, patientID,
         (CASE WHEN PJMPSID is not null, THEN 'In surgery'
               WHEN cancerstatus is null then 'no surgery needed'    
          END);

一些注意事项:

  • NOLOCK 不应该被使用,除非你真的知道你在做什么。
  • 您显然正在使用 SQL Server。您应该标记问题。
  • SELECTGROUP BY 列需要保持一致。在SELECT 中包含cancerstatus 是没有意义的,除非它也在GROUP BY 中。

【讨论】:

  • 嘿,谢谢,它给了我关于 cancerstatus fielde 的错误,我更新了问题。因为你是用一个病例来代替癌症状态,如果我没记错的话?
猜你喜欢
  • 1970-01-01
  • 2014-12-04
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2021-03-15
  • 2013-11-19
  • 2015-07-21
相关资源
最近更新 更多