Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 - Fatal编程技术网

Sql 如何计算两个累计值之间的比率?

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 >

我需要返回“Pocet starych”(现有客户)和“Pocet novych”(新客户)在今年的比率。 我想到了:

    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和