分组集与 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 组的一部分。
我有一个查询与在银行系统中提取异常信息的函数相交。这些异常中的每一个都有大量信息,我正在寻找一种适当的方法来对我的工作进行 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 组的一部分。