如果使用GROUP BY
子句,则不会区分NULL
值。我认为一个简单的解决方案是使用UNION ALL
运算符来为不同的CaseTypeDesc
添加行。
事情是这样的:
select count(CaseTypeDesc) ...
from ...
where CaseTypeDesc = 'Project Finance'
UNION ALL
select count(CaseTypeDesc)...
from ...
where CaseTypeDesc = 'Whole of Market'
UNION ALL
select count(CaseTypeDesc)...
from ...
where CaseTypeDesc = 'CustomBuild'
它会给你市场整体计数为零,即使它不会出现在您的查询。
这应该是您的查询。
SELECT Count(ct.CaseTypeDesc)AS Done, 'Project Finance' CaseTypeDesc,ap.StatusDesc As [Mortgage Status],
SUM(pm.ProcFeeExp + pm.ArrangementFee) As Total ,u.Fullname as Advisor
FROM dbo.tbl_Profile AS p
INNER JOIN dbo.tbl_Profile_Mortgage AS pm
ON p.ID = pm.FK_ProfileID
INNER JOIN dbo.tbl_AppStatus AS ap
ON pm.MortgageStatus = ap.StatusID
INNER JOIN dbo.tbl_CaseTypes AS ct
ON p.CasetypeID = ct.CaseTypeID
LEFT JOIN dbo.tbl_User AS u
ON p.Advisor = u.UserID
WHERE pm.MortgageStatus = 7
AND ct.CaseTypeDesc = 'Project Finance'
AND p.Advisor IN (266,104,172,145,177,253,286,261,289,138)
AND (
pm.DatePassed BETWEEN @Start AND @End
OR pm.DateCompleted BETWEEN @Start AND @End
OR pm.DateOffered BETWEEN @Start AND @End
)
UNION ALL
SELECT Count(ct.CaseTypeDesc)AS Done, 'Whole of Market' as CaseTypeDesc,ap.StatusDesc As [Mortgage Status],
SUM(pm.ProcFeeExp + pm.ArrangementFee) As Total ,u.Fullname as Advisor
FROM dbo.tbl_Profile AS p
INNER JOIN dbo.tbl_Profile_Mortgage AS pm
ON p.ID = pm.FK_ProfileID
INNER JOIN dbo.tbl_AppStatus AS ap
ON pm.MortgageStatus = ap.StatusID
INNER JOIN dbo.tbl_CaseTypes AS ct
ON p.CasetypeID = ct.CaseTypeID
LEFT JOIN dbo.tbl_User AS u
ON p.Advisor = u.UserID
WHERE pm.MortgageStatus = 7
AND ct.CaseTypeDesc = 'Whole of Market'
AND p.Advisor IN (266,104,172,145,177,253,286,261,289,138)
AND (
pm.DatePassed BETWEEN @Start AND @End
OR pm.DateCompleted BETWEEN @Start AND @End
OR pm.DateOffered BETWEEN @Start AND @End
)
UNION ALL
SELECT Count(ct.CaseTypeDesc)AS Done, 'CustomBuild' as CaseTypeDesc,ap.StatusDesc As [Mortgage Status],
SUM(pm.ProcFeeExp + pm.ArrangementFee) As Total ,u.Fullname as Advisor
FROM dbo.tbl_Profile AS p
INNER JOIN dbo.tbl_Profile_Mortgage AS pm
ON p.ID = pm.FK_ProfileID
INNER JOIN dbo.tbl_AppStatus AS ap
ON pm.MortgageStatus = ap.StatusID
INNER JOIN dbo.tbl_CaseTypes AS ct
ON p.CasetypeID = ct.CaseTypeID
LEFT JOIN dbo.tbl_User AS u
ON p.Advisor = u.UserID
WHERE pm.MortgageStatus = 7
AND ct.CaseTypeDesc = 'CustomBuild'
AND p.Advisor IN (266,104,172,145,177,253,286,261,289,138)
AND (
pm.DatePassed BETWEEN @Start AND @End
OR pm.DateCompleted BETWEEN @Start AND @End
OR pm.DateOffered BETWEEN @Start AND @End
)
让我知道这是否对您有帮助。
您的查询是否为'Whole of Market'返回null?我的意思是你的查询返回'CaseTypeDesc'列的'Project Finance'和'CustomBuild',但它不返回'Whole of Market',对吧? –
嗨它会返回所有3个casetypes项目融资,整个市场,CustomBuild如果它有一个计数。例如它会显示custombuild 12,整个市场6. – RustyHamster
我想说的是custombuild 12,整个市场6,项目融资0 – RustyHamster