GROUPING SETS与GROUP BY

时间:2015-08-28 18:04:55

标签: sql-server sql-server-2008 grouping

我有一个与一个函数相交的查询,该函数可以提取银行系统中的异常信息。这些例外中的每一个都有大量的信息,我正在寻找一种合适的方式来分组和/或联合我的工作,以便正确地发布。 我的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做到这一点,但这似乎是一个糟糕的方法,因为我引用的功能可能会导致巨大的性能损失,如果这是客户想要的非常一般的报告。

由于

1 个答案:

答案 0 :(得分:0)

我实际上是在SSRS的前端做了这个,在一个组内进行分组。然后是一个儿童组。

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