Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何确定两个查询中的值之间的比率?_Sql_Sql Server_Sql Server 2016 - Fatal编程技术网

Sql 如何确定两个查询中的值之间的比率?

Sql 如何确定两个查询中的值之间的比率?,sql,sql-server,sql-server-2016,Sql,Sql Server,Sql Server 2016,我有两个疑问 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

我有两个疑问

 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
我想在(Count)字段中确定它们之间的比率。
我尝试了使用cte实现所有的联合,但没有达到预期的效果。

尝试类似的方法

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

我认为您可以
内部联接
两个子查询
使用
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

您可以使用通用表表达式:

    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

你能添加你的联合所有脚本吗?它们之间的定量(计数)
是什么意思?您能举个例子吗?两个查询是否总是返回相同的
区域列表
s,或者一个查询有时是否有另一个查询没有的
区域