首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果只有一列不同,我如何才能得到一行?

如果只有一列不同,我如何才能得到一行?
EN

Stack Overflow用户
提问于 2019-05-31 10:26:38
回答 3查看 203关注 0票数 1

我有一张桌子上有病人的身份证,联系日期和行动代码。我希望检索所有行,其操作代码等于EPS或D,但是,如果操作代码存在于同一联系人日期,则只希望保留一行。

例如,这是我表的一部分,日记:

代码语言:javascript
复制
PatientID  Contactdate  Actioncode
1          2010-5-6     EPS
1          2010-5-6     D
1          2012-3-4     CNT
1          2013-7-8     D
2          2010-1-4     EPS
2          2010-5-6     D

这是我现在要检索的所有行的代码,这些行的actioncode是EPS或D。

代码语言:javascript
复制
select * from journal j where j.actioncode in ('EPS', 'D')

我试着按接触式分组,但后来我错过了病人不同的行。同样的效果发生在不同的(接触式)。当日期和病人相似且操作代码为D或EPS时,我可以在这里只返回一行吗?

优先结果:

代码语言:javascript
复制
PatientID   Contactd   Actioncode
1           2010-5-6   D
1           2012-3-4   D
2           2010-1-4   EPS
2           2010-5-6   D
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-31 10:32:03

您需要的是一个GROUP BY两列: PatientID和Contactdate。您可以使用MAX()MIN()来选择一行。

代码语言:javascript
复制
select
j.PatientID,
j.Contactdate,
MIN(j.actionCode)
from 
journal j 
where j.actioncode in ('EPS', 'D')
group by j.PatientID, j.Contactdate 

为了匹配您喜欢的结果,您应该使用MIN()

票数 1
EN

Stack Overflow用户

发布于 2019-05-31 10:35:12

我们可以在这里尝试使用ROW_NUMBER

代码语言:javascript
复制
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY PatientID, Contactdate
                                 ORDER BY Actioncode) rn
    FROM journal
    WHERE Actioncode in ('EPS', 'D')
)

SELECT PatientID, Contactdate, Actioncode
FROM cte
WHERE rn = 1;

如果两个动作代码都出现,这将任意保留Actioncode='D'记录。如果希望保留EPS记录,则修改对ROW_NUMBER的调用以使用ORDER BY Actioncode DESC

票数 2
EN

Stack Overflow用户

发布于 2019-05-31 10:43:41

你可以和UNION公司一起做这两件事:

代码语言:javascript
复制
select * from journal where actioncode = 'D'
union all
select * from journal j where j.actioncode = 'EPS'
and not exists (
  select 1 from journal
  where PatientID = j.PatientID and Contactdate = j.Contactdate and actioncode = 'D'
)

第二个查询仅在第一个查询不返回actioncode = 'D'的情况下才会获取行。

演示

结果:

代码语言:javascript
复制
> patientid | contactdate | actioncode
> --------: | :---------- | :---------
>         1 | 2010-05-06  | D         
>         1 | 2013-07-08  | D         
>         2 | 2010-05-06  | D         
>         2 | 2010-01-04  | EPS 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56393317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档