分组集与 GROUP BY

GROUPING SETS Vs GROUP BY

我有一个查询与在银行系统中提取异常信息的函数相交。这些异常中的每一个都有大量信息,我正在寻找一种适当的方法来对我的工作进行 Group and/or 合并,以便正确输出。 我的SQL如下:

SELECT cb.loanNumber, cb.customerName, cb.borrowerType,
case    WHEN cb.borrowerType = 'Primary Borrower' THEN 1
ELSE 2 END as borrowerOrder
FROM ( SELECT   c.customerName, c.customerNumber,
'Primary Borrower'   AS     borrowerType,l.loanNumber
FROM    customer AS c INNER JOIN loan AS l
ON      c.customerId=l.customerId
UNION   SELECT  c.customerName, c.customerNumber, 
bt.borrowerTypeName AS borrowerType,l.loanNumber
    FROM    customer AS c 
    INNER JOIN coborrower AS cb
    ON      c.customerId=cb.customerId
    INNER JOIN  loan AS l
    ON          l.loanId=cb.loanId
    INNER JOIN  borrowerType AS bt
    ON          bt.borrowerTypeId=cb.borrowerTypeId
 ) AS cb
 INNER JOIN fnGetReportExceptions
('-1',   '-1',   'All',   '-1',   '-1',   'L',   
'All',   'All',   'All',   '0',
'-1',   '-1',   '-1')  func
ON  cb.loanNumber = func.loanNumber
GROUP BY cb.loanNumber, cb.customerName, cb.borrowerType
ORDER BY cb.loanNumber, borrowerOrder,borrowerType, cb.customerName

我知道很乱,但这是我必须处理的。 SQL 列出了我的有例外情况的贷款清单和下面的任何共同借款人。问题是当我尝试从函数中添加信息时,由于返回的异常数量,它会产生结果。

举个例子。当我的选择变成

SELECT
cb.loanNumber,
cb.customerName,
cb.borrowerType,
case    WHEN cb.borrowerType = 'Primary Borrower' THEN 1
ELSE 2 END as borrowerOrder, 
func.exceptionDefName
...

我得到了类似

的东西
loan Number  customerName    borrowerType     borrowerOrder  DefName
111          John Smith      Primary Borrower 1              Missng Sig
111          John Smith      Primary Borrower 1              Missng Doc
111          Wendy Smith     CoBorrower       2              Missng Sig
111          Wendy Smith     Coborrower       2              Missng Guar
111          Wendy Smith     Coborrower       2              Missing Doc

我要找的是:

loan Number  customerName    borrowerType       borrowerOrder DefName
111          John Smith      Primary Borrower   1             Missng Sig
                                                              Missng Doc
             Wendy Smith     CoBorrower         2             Missng Sig
                                                              Missng Guar
                                                              Missing Doc

我会通过 UNIONS 和 Selects 来完成,但考虑到我引用的函数可能会导致巨大的性能损失,如果这是客户想要的非常笼统的报告,这似乎是一种糟糕的方式。

谢谢

我实际上是在 SSRS 的前端做这件事的,在一个组内进行分组。然后是一个子组。

它完美地显示了数据,首先对官员进行分组,然后对贷款进行分组,其中有一个子报告作为贷款 ID 组的一部分。