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,或者一个查询有时是否有另一个查询没有的区域
?