简体   繁体   English

对子查询求和并按不同列分组

[英]sum a subquery and group by different column

as the title says, i need help on combining same result set, it's kinda hard to explain, so here's my code:正如标题所说,我需要帮助来组合相同的结果集,这有点难以解释,所以这是我的代码:

SELECT DISTINCT a.liability_number AS CIF
    ,CASE 
        WHEN b.SECTOR = '1001'
            THEN 'I'
        WHEN b.SECTOR = '2001'
            THEN 'C'
        END AS [Customer Type]
    ,(
        SELECT ROUND(SUM(internal_amount) / 1000000, 0)
        FROM "limit"
        WHERE INSERT_DATE = '20200619'
            AND liability_number = a.liability_number
        ) AS [Previous Limit]
    ,(
        SELECT ROUND(SUM(internal_amount) / 1000000, 0)
        FROM "limit"
        WHERE INSERT_DATE = '20200626'
            AND liability_number = a.liability_number
        ) AS [Current Limit]
    ,ABS(ROUND((
                (
                    SELECT SUM(internal_amount)
                    FROM "limit"
                    WHERE INSERT_DATE = '20200619'
                        AND liability_number = a.liability_number
                    ) - (
                    SELECT SUM(internal_amount)
                    FROM "limit"
                    WHERE INSERT_DATE = '20200626'
                        AND liability_number = a.liability_number
                    )
                ) / 1000000, 0)) AS [Limit Difference]
    ,(
        SELECT ABS(ROUND(SUM(total_os) / 1000000, 0))
        FROM "limit"
        WHERE INSERT_DATE = '20200619'
            AND liability_number = a.liability_number
        ) + (
        SELECT ABS(ROUND(online_actual_bal / 1000000, 0))
        FROM account
        WHERE insert_date = '20200619'
            AND account_number = a.account
        ) AS [Previous Outstanding]
    ,(
        SELECT ABS(ROUND(SUM(total_os) / 1000000, 0))
        FROM "limit"
        WHERE INSERT_DATE = '20200626'
            AND liability_number = a.liability_number
        ) + (
        SELECT ABS(ROUND(online_actual_bal / 1000000, 0))
        FROM account
        WHERE insert_date = '20200626'
            AND account_number = a.account
        ) AS [Current Outstanding]
    ,(
        SELECT ABS(ROUND(SUM(total_os) / 1000000, 0))
        FROM "limit"
        WHERE INSERT_DATE = '20200626'
            AND liability_number = a.liability_number
        ) + (
        SELECT ABS(ROUND(online_actual_bal / 1000000, 0))
        FROM account
        WHERE insert_date = '20200626'
            AND account_number = a.account
        ) - (
        SELECT ABS(ROUND(SUM(total_os) / 1000000, 0))
        FROM "limit"
        WHERE INSERT_DATE = '20200619'
            AND liability_number = a.liability_number
        ) + (
        SELECT ABS(ROUND(online_actual_bal / 1000000, 0))
        FROM account
        WHERE insert_date = '20200619'
            AND account_number = a.account
        ) AS [Outstanding Difference]
    ,(
        SELECT COUNT(RECID)
        FROM "limit"
        WHERE INSERT_DATE = '20200619'
            AND liability_number = a.liability_number
        ) AS [Previous Loan Count]
    ,(
        SELECT COUNT(RECID)
        FROM "limit"
        WHERE INSERT_DATE = '20200626'
            AND liability_number = a.liability_number
        ) AS [Current Loan Count]
FROM "limit" a
JOIN customer b ON a.INSERT_DATE = b.INSERT_DATE
    AND a.liability_number = b.customer_no
WHERE a.INSERT_DATE = '20200626'
    AND a.l_tgl_loan >= '20200622'
    AND a.l_status_fas IN (
        '2'
        ,'3'
        ,'5'
        ,'17'
        )
ORDER BY a.LIABILITY_NUMBER;

and here's the result:结果如下:

当前结果

what i want is:我想要的是:

目标

am trying to sum the subquery, and do group by, but whenever i tried it, it always gives me error:我试图对子查询求和,并进行分组,但每当我尝试它时,它总是给我错误:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.无法对包含聚合或子查询的表达式执行聚合 function。

So, how do i achive this?那么,我该如何实现呢?

Move all the subquery to the FROM statement, joining them with the main table, than in the main SELECT you call the fields already aggregated in the subquery将所有子查询移动到 FROM 语句,将它们与主表连接起来,而不是在主 SELECT 中调用已在子查询中聚合的字段

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM