Reputation: 426
Updated.
Current query looks like:
SELECT MAX([Ztel]) as [Ztel] , MAX([Beztel]) as [Beztel], MAX([Otwarte]) as [Otwarte], MAX([Otwartez]) as [Otwartez], [Windykator]
FROM (
SELECT COUNT(C.CaseDetailsId) AS [Ztel], NULL AS [Beztel], NULL AS [Otwarte], NULL as [Otwartez], U.FirstName
+ ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN DebtorDetails AS D
ON C.CaseDetailsId = D.CaseDetailsId
JOIN Users AS U
ON C.UserId = U.UserId
WHERE D.DebtorDetailsId IN (SELECT DebtorDetailsId
FROM DebtorPhone
WHERE (IsValid = 'True')
OR (IsDefault = 'True'))
AND C.CaseStatusId <> 2
AND C.CaseStatusId <> 6
GROUP BY
U.FirstName, U.LastName
UNION ALL
SELECT NULL, COUNT(CaseDetailsId), NULL, NULL, U.FirstName + ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN Users AS U
ON C.UserId = U.UserId
WHERE C.CaseStatusId <> 2
AND C.CaseStatusId <> 6
GROUP BY
U.FirstName, U.LastName
UNION ALL
SELECT NULL, NULL, COUNT(CaseDetailsId), NULL, U.FirstName + ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN Users AS U
ON C.UserId = U.UserId
WHERE C.CaseStatusId = 1
GROUP BY
U.FirstName, U.LastName
UNION ALL
SELECT NULL, NULL, NULL, COUNT(C.CaseDetailsId), U.FirstName
+ ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN DebtorDetails AS D
ON C.CaseDetailsId = D.CaseDetailsId
JOIN Users AS U
ON C.UserId = U.UserId
WHERE D.DebtorDetailsId IN (SELECT DebtorDetailsId
FROM DebtorPhone
WHERE (IsValid = 'True')
OR (IsDefault = 'True'))
AND C.CaseStatusId = 1
GROUP BY
U.FirstName, U.LastName
) AS x
GROUP BY [Windykator]
Works fine however they want me to add 3 additional columns into dataset. Taken from CaseDetailsView columns: ClientNameShort, SetId, EndServiceDate. Ideas? Or should I make another subquery?
Expected results: http://oi43.tinypic.com/2vdi5vk.jpg
Tables to be used:
CaseDetailsView: SetId, ClientNameShort, UserId, EndServiceDate, CaseDetailsId, CaseStatusId - overall list of cases
DebtorDetails: CaseDetailsId, DebtorDetailsId - details of debtor
DebtorPhone: DebtorDetailsId - list of debtors' phone numbers.
Column3: number of overall cases where CaseStatusId <> 2 and <> 6
Column4: number of overall cases where CaseStatusId <> 2 and <> 6 and exists in DebtorPhone (so the number of cases where we got phone number to debtor)
Column5: number of Open cases (where CaseStatusId = 1) overall
Column6: number of Open Cases (where CaseStatusId = 1) and exists in DebtorPhone (so we have phone number to debtor)
Upvotes: 1
Views: 490
Reputation: 6205
If you just want show everything in one row, you can try this
SELECT MAX([Ztel]), MAX([Beztel]), MAX([Windykator])
FROM (
.....
) AS x
UPDATE:
Base on your comment, I think what you are looking for is this
SELECT MAX([Ztel]), MAX([Beztel]), [Windykator]
FROM (
SELECT COUNT(C.CaseDetailsId) AS [Ztel], NULL AS [Beztel], U.FirstName
+ ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN DebtorDetails AS D
ON C.CaseDetailsId = D.CaseDetailsId
JOIN Users AS U
ON C.UserId = U.UserId
WHERE D.DebtorDetailsId IN (SELECT DebtorDetailsId
FROM DebtorPhone
WHERE (IsValid = 'True')
OR (IsDefault = 'True'))
AND C.CaseStatusId <> 2
AND C.CaseStatusId <> 6
GROUP BY
U.FirstName, U.LastName
UNION ALL
SELECT NULL, COUNT(CaseDetailsId), U.FirstName + ' ' + U.LastName AS [Windykator]
FROM CaseDetails AS C
JOIN Users AS U
ON C.UserId = U.UserId
WHERE C.CaseStatusId <> 2
AND C.CaseStatusId <> 6
GROUP BY
U.FirstName, U.LastName
) AS x
GROUP BY [Windykator]
Upvotes: 2