2017-07-03 22 views
0

我有這兩個查詢如何使兩個查詢的值之間的比率?

SELECT 
    COUNT(DISTINCT s.KliRC) Celkem 
    ,r.Region 
FROM dbo.Smlouvy s 
     JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
     JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
GROUP BY 
    r.Region 

-- + 

SELECT 
    COUNT(DISTINCT s.KliRC) Solus 
    ,r.Region 
FROM dbo.SolusDetaily sd 
    JOIN dbo.Smlouvy s  ON sd.CisloZadosti = s.CisloSmlouvy  
     JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
     JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
GROUP BY 
    r.Region 

我想使對(計數)字段它們之間的比率。 我試過聯盟所有與cte,但沒有預期的結果。

+0

您可以添加UNION ALL腳本請 –

+0

是什麼'他們之間的比值(計數)'是什麼意思?你能舉個例子嗎? – Jamiec

+0

這兩個查詢是否總是返回'Region'的相同列表,或者一個查詢是否有一個'Region',而另一個查詢則不會? – toonice

回答

0

嘗試類似這樣的事情。

select Region,(Celkem * 1.0) /sum(Celkem)over() as Ratio 
(
selcet Region, COUNT(DISTINCT s.KliRC) Celkem 
from .. 
Union All 
selcet Region, COUNT(DISTINCT s.KliRC) Solus 
from .. 
) A 
0

我想你可以INNER JOIN兩個子查詢。
使用NULLIF(c.Celkem,0)來避免被零除錯誤。

SELECT s.Region, (s.Solus * 1.0)/NULLIF(c.Celkem,0) as Ratio 
FROM 
(
    SELECT 
      COUNT(DISTINCT s.KliRC) Solus 
      ,r.Region 
    FROM dbo.SolusDetaily sd 
     JOIN dbo.Smlouvy s  ON sd.CisloZadosti = s.CisloSmlouvy  
      JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
      JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
    GROUP BY 
     r.Region 
) s 
INNER JOIN 
(
    SELECT 
      COUNT(DISTINCT s.KliRC) Celkem 
      ,r.Region 
    FROM dbo.Smlouvy s 
      JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
      JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
    GROUP BY 
     r.Region 
) c on s.Region = c.Region 
0

您可以使用公用表表達式:

with t1 as 
    (
    SELECT 
     COUNT(DISTINCT s.KliRC) Celkem 
     ,r.Region Region 
    FROM dbo.Smlouvy s 
      JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
      JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
    GROUP BY 
     r.Region 
    ), 
    with t2 as 
    (

    SELECT 
     COUNT(DISTINCT s.KliRC) Solus 
     ,r.Region Region 
    FROM dbo.SolusDetaily sd 
     JOIN dbo.Smlouvy s  ON sd.CisloZadosti = s.CisloSmlouvy  
      JOIN CS_OZ oz  ON oz.KodOZ = s.KodOZ 
      JOIN CS_Regiony r ON r.KodRegionu = oz.KodRegionu 
    GROUP BY 
     r.Region 
    ) 
    -- get ratio 
    select t1.region , t1.Celkem /t2.Solus as ratio 
    from t1 
    join t2 on t1. Region = t2.Region