在sql中计算并划分同一个表的两列

时间:2013-12-12 09:47:46

标签: sql tsql

我需要获取Id为11和12分开的记录数。然后我必须按期间(1,2,3,4,5)对它们进行分组,并将每个ID与相应的组分开。 即(ID = 11,周期为1)/(ID = 12,周期为1)

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

示例:

    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 where period = 1 and metric id = 11)/(Countvalue where period = 1 and metric id = 12)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

将原始查询选择到工作表中然后将pNum除以MetricPeriod = MetricPeriod

会不会更容易

如果您只是在寻找每个MetricID的平均值,您可以将每个出现的时间段的总和相加,然后按总周期数进行分类?只是扔一些想法希望这有帮助。

答案 2 :(得分:0)

我在这里使用了案例陈述,对我有用

select CompanyCode  ,'Commission Pec',  Year
,sum(case  when CommissionType='Commission Recevied' then JAN else 0 end)/sum(case when CommissionType='Net Payments from WM' and isnull(JAN,0)<>0 then JAN else 1  end) 
 from Commission_Consolidate

 group by CompanyCode,Year

 end
相关问题