Sql 如何计算两个累计值之间的比率?
我需要返回“Pocet starych”(现有客户)和“Pocet novych”(新客户)在今年的比率。 我想到了:Sql 如何计算两个累计值之间的比率?,sql,sql-server,Sql,Sql Server,我需要返回“Pocet starych”(现有客户)和“Pocet novych”(新客户)在今年的比率。 我想到了: SELECT Pomer = 1.0* (SUM(CASE ( SELECT COUNT(KliRc) FROM dbo.Smlouvy WHERE VyplacenaCastka >
SELECT
Pomer = 1.0*
(SUM(CASE
(
SELECT
COUNT(KliRc)
FROM
dbo.Smlouvy
WHERE VyplacenaCastka > 0
GROUP BY
KliRC
HAVING
COUNT(KliRC) > 1 -- Pocet starych
) When 0 Then 1 Else 0 End )
/ SUM(CASE
(
SELECT
COUNT(KliRc)
FROM
dbo.Smlouvy
WHERE VyplacenaCastka > 0
GROUP BY
KliRC
HAVING
COUNT(KliRc) = 1 -- Pocet novych
) When 1 Then 1 Else 0 End ))
FROM
dbo.Smlouvy
WHERE
DATEPART(YYYY, DatumZadosti) = DATEPART(YYYY, GETDATE())
KliRC=个人识别号
返回
无法对包含
聚合或子查询
大宗报价
任何帮助都将不胜感激。
谢谢。您的查询逻辑中也包含错误,但我假设您想写以下内容:
WITH Grouped AS(
SELECT
Cnt = COUNT(KliRc)
FROM
dbo.Smlouvy
WHERE VyplacenaCastka > 0
GROUP BY
KliRC
)
SELECT 1.0 * SUM(CASE WHEN Cnt > 1 THEN 1 ELSE 0 END) / SUM(CASE WHEN Cnt = 1 THEN 1 ELSE 0 END)
FROM Grouped
为什么在
案例
前面有一个总和
?这应该是导致错误消息的原因。我认为您的逻辑中有错误:当0时,然后1其他0结束
将始终返回0,因为具有COUNT(KliRC)>1
。是的,这是一个垃圾……感谢您的回答,它确实帮助了我。如果我想在数据库中查找所有过去的记录,只返回今年签订合同的新客户/现有客户的比例,该怎么办?您可以在此处添加日期筛选器:WHERE VyplacenaCastka>0和