首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按列集划分的Server组

按列集划分的Server组
EN

Stack Overflow用户
提问于 2016-04-08 03:16:50
回答 1查看 101关注 0票数 1

我有一套数据,需要用这样的规则来统计病人的就诊情况:

  1. 无论原因为何,同一天两次或两次以上看同一位医生的次数等于一次就诊。
  2. 两次或更多次因同一原因探访不同的医生,相当于一次探访。
  3. 由于不同原因,同一天两次或更多次拜访不同的医生等于两次或两次以上的访问。

示例数据:

代码语言:javascript
运行
复制
DoctorId      PatientId       VisitDate       ReasonCode   RowId
--------      ---------       ---------       ----------   -----
1              100             2014-01-01        200         1 
1              100             2014-01-01        210         2
2              100             2014-01-01        200         3
2              100             2014-01-11        300         4
1              100             2014-01-15        200         5
2              400             2014-01-15        200         6

在本例中,我的最终计数将基于分组rowId 1、2、3进行1次访问;将第4行分组为1次访问,将第5行分组为1次访问,对患者100进行总共3次访问。病人400也有1次探视。

代码语言:javascript
运行
复制
patientid   visitdate   numberofvisits
---------   ---------   --------------
100         2014-01-01   3
100         2014-01-11   1
100         2014-01-15   1
400         2014-01-15   1

我被困的地方是如何处理这个组,这样我就可以得到不同的场景。如果小组是医生,约会,我就没事了。如果是医生,约会,ReasonCode,我会没事的。这是doctorId和ReasonCode在涉及2名医生的场景中的逻辑,而在另一位医生中,医生it和日期是相同的医生。我已经很长时间没有深入了解Server了,所以有可能是一个通用的表表达式是解决方案,但我没有看到它。我使用的是Sql Server 2014,性能方面有很好的延迟。我将寻找产生上述结果的sql服务器查询。据我所知,没有办法像我所需要的那样把它分类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-10 16:34:09

答案是一个and子句,并在最后计数之前对每个集合进行分组。有时候,我们把事情搞得太复杂了。

代码语言:javascript
运行
复制
DECLARE @tblAllData TABLE
(   
      DoctorId              INT NOT NULL
    , PatientId         INT NOT NULL
    , VisitDate         DATE NOT NULL
    , ReasonCode    INT NOT NULL
    , RowId                 INT NOT NULL
)

INSERT @tblAllData 
SELECT
        1,100,'2014-01-01',200,1
UNION ALL 
SELECT
    1,100,'2014-01-01',210,2
UNION ALL 
SELECT
2,100,'2014-01-01',200,3
UNION ALL 
SELECT
2,100,'2014-01-11',300,4
UNION ALL 
SELECT
1,100,'2014-01-15',200,5
UNION ALL 
SELECT
2,400,'2014-01-15',200,6

DECLARE @tblTempCountedRows AS TABLE
(
       PatientId                        INT NOT NULL    
    , VisitDate                     DATE
    , ReasonCode                INT 
)
INSERT @tblTempCountedRows

    SELECT PatientId, VisitDate,0 
         FROM @tblAllData       
    GROUP BY PatientId, DoctorId, VisitDate 
EXCEPT 
SELECT PatientId, VisitDate, ReasonCode
 FROM @tblAllData
 GROUP BY PatientId, VisitDate, ReasonCode

 select * from @tblTempCountedRows 

    DECLARE @tblFinalCountedRows AS TABLE
(
    PatientId                       INT NOT NULL    
 , VisitCount                   INT
)
 INSERT @tblFinalCountedRows 
SELECT 
    PatientId
, count(1) as Member_visit_Count
FROM
    @tblTempCountedRows 
GROUP BY PatientId

SELECT * from @tblFinalCountedRows

下面是结果的Sql:Sql Fiddle

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36490905

复制
相关文章

相似问题

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