2013-12-12 25 views
0

我需要得到Id为11和12分开的记录数。然后,我必须按期间(即1,2,3,4,5)对它们进行分组,并将每个ID与它们对应的组分开。 即(1期ID = 11的计数)/(期1的ID = 12的计数)统计和划分sql中的同一表的两列

我已经试过了。但是这只是给了我每一个计数。我怎样才能将它们分在同一张表中。

例子:

SELECT COUNT(pNum), SK_MetricDatePeriod , SK_MetricID 
FROM 
(
    SELECT SK_PatientID as pNum , SK_MetricDatePeriod ,SK_MetricID FROM [IntegratedCare].[report].[MetricValues] WHERE SK_MetricID = 11 
    UNION ALL 
    SELECT SK_PatientID ,SK_MetricDatePeriod , SK_MetricID FROM [IntegratedCare].[report].[MetricValues] WHERE SK_MetricID = 12 
) t 
WHERE pNum IS NOT NULL 
GROUP BY SK_MetricID 
    ,SK_MetricDatePeriod 
ORDER BY SK_MetricID,SK_MetricDatePeriod; 

结果是:

Count MetricPeriod MetricID 
10199 1 11 
10075 2 11 
9991 3 11 
9891 4 11 
8952 5 11 
12298 1 12 
12130 2 12 
12058 3 12 
11943 4 12 
10860 5 12 

怎么能算和鸿沟。在上面的查询。

结果我寻找这样的:

DividedResult MetricPeriod 
    10199 1 
    10075 2 
    9991 3 
    9891 4 
    8952 5 

DivideResult除以(Countvalue其中周期= 1和度量ID = 11)/(Countvalue其中周期= 1和度量ID = 12)

+0

避免一个部门能不能给你正在寻找的结果的一个例子吗? – user3041160

+0

我已经在我的问题的顶部提到了它。但仍然,编辑我的问题与所需的结果为你的问题。 – user2919277

+0

你不需要这个联合你可以放在哪里(id = 11或id = 12)和计数(列)ingnores null!你不需要那个pNum也不为NULL – jean

回答

1

的拥有数..是0

SELECT count(SK_PatientID) as pNum 
      , count(case when SK_MetricID = 11 then 0 end)/count(case when SK_MetricID = 12 then 0 end) 
      , SK_MetricDatePeriod 
    FROM [MetricValues] 
    WHERE SK_MetricID In (11, 12) 
    GROUP BY SK_MetricDatePeriod 
    Having count(case when SK_MetricID = 12 then 0 end) > 0 
0
得到

不是完整的答案,但它不会让我评论。

那岂不是更容易选择原始查询到工作表,然后除以PNUM其中MetricPeriod = MetricPeriod

如果你只是寻找一个跨平均每MetricID你可以只总结你PNUM每个发生的时期,然后除以总时间段?只是抛出一些想法希望这有助于。

+0

在我的原始表中,我必须计算度量标识为12和度量标识为11的行数,并按句点对它们进行分组。但问题是我不能直接划分,因为我必须加入表格来划分。如果我加入,我不会得到行数。 – user2919277

+0

啊,我知道我恐怕我不知道答案。我只是建议你可以尝试先完成所有的分组和计算,然后将结果集保存到其他分区的表中。 – BasicHorizon