如何在两个agregregated值之间进行比率?

时间:2017-06-26 10:11:31

标签: sql sql-server

我需要在Pocet starych'之间返回一个比例。 (现有客户)a' 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 =个人识别号码

返回

  

无法对包含的表达式执行聚合函数   聚合或子查询。

     

块引用

任何帮助都会受到重视。 感谢。

1 个答案:

答案 0 :(得分:0)

您的查询也包含逻辑中的错误,但我假设您要写这个:

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