Reputation: 372
I have the following query in a MS SQL Server 2014 environment and I would like to add a "GRAND_TOTALS" row at the bottom that sums the values in the aggregate (COUNT) column (Total_Exams). Ideally looking for something relatively clean, without having to use temp tables if possible. Thanks!
SELECT
A.TEST_TYPE,(CONVERT(CHAR(10),A.TEST_DT,121)), B.UNIT, COUNT(*) AS
'Total_Tests'
FROM USERSCT B, SEARCHPARAM B1, USERTEST A, CUSTOMEXAM C
WHERE ( B.USERID = B1.USERID
AND B.USRACCT = B1.USRACCT
AND ( B.ASOFDATE =
(SELECT MAX(B_ED.ASOFDATE) FROM USERSCT B_ED
WHERE B.USERID= B_ED.USERID
AND B.USRACCT = B_ED.USRACCT
AND B_ED.ASOFDATE <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.ASOFTIME =
(SELECT MAX(B_ES.ASOFTIME) FROM PS_EMPLOYEES B_ES
WHERE B.USERID = B_ES.USERID
AND B.USRACCT = B_ES.USRACCT
AND B.ASOFDATE = B_ES.ASOFDATE)
AND B.USERID = A.USERID
AND A.TEST_TYPE = 'CHISQUARE'
AND A.USERID = C.USERID
GROUP BY A.TEST_TYPE, A.TEST_DT, B.UNIT
Current sample results:
Desired Results:
Upvotes: 0
Views: 64
Reputation: 6088
Usin CTE
WITH cte AS
(
SELECT
Cast(A.TEST_TYPE as Varchar) as TEST_TYPE, cast((CONVERT(CHAR(10),A.TEST_DT,121)) as varchar) as Date_Col, cast(B.UNIT as varchar) AS UNIT, COUNT(*) AS
'Total_Tests'
FROM USERSCT B, SEARCHPARAM B1, USERTEST A, CUSTOMEXAM C
WHERE ( B.USERID = B1.USERID
AND B.USRACCT = B1.USRACCT
AND ( B.ASOFDATE =
(SELECT MAX(B_ED.ASOFDATE) FROM USERSCT B_ED
WHERE B.USERID= B_ED.USERID
AND B.USRACCT = B_ED.USRACCT
AND B_ED.ASOFDATE <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.ASOFTIME =
(SELECT MAX(B_ES.ASOFTIME) FROM PS_EMPLOYEES B_ES
WHERE B.USERID = B_ES.USERID
AND B.USRACCT = B_ES.USRACCT
AND B.ASOFDATE = B_ES.ASOFDATE)
AND B.USERID = A.USERID
AND A.TEST_TYPE = 'CHISQUARE'
AND A.USERID = C.USERID
GROUP BY A.TEST_TYPE, A.TEST_DT, B.UNIT
)
SELECT * FROM cte
UNION
SELECT 'Grand Total','','',SUM(Total_Tests)
FROM cte
OR USING NESTED QUERY
Select * from(
SELECT
Cast(A.TEST_TYPE as Varchar) as TEST_TYPE,cast((CONVERT(CHAR(10),A.TEST_DT,121)) as varchar) as Date_Col, cast(B.UNIT as varchar) UNIT, COUNT(*) AS
'Total_Tests'
FROM USERSCT B, SEARCHPARAM B1, USERTEST A, CUSTOMEXAM C
WHERE ( B.USERID = B1.USERID
AND B.USRACCT = B1.USRACCT
AND ( B.ASOFDATE =
(SELECT MAX(B_ED.ASOFDATE) FROM USERSCT B_ED
WHERE B.USERID= B_ED.USERID
AND B.USRACCT = B_ED.USRACCT
AND B_ED.ASOFDATE <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.ASOFTIME =
(SELECT MAX(B_ES.ASOFTIME) FROM PS_EMPLOYEES B_ES
WHERE B.USERID = B_ES.USERID
AND B.USRACCT = B_ES.USRACCT
AND B.ASOFDATE = B_ES.ASOFDATE)
AND B.USERID = A.USERID
AND A.TEST_TYPE = 'CHISQUARE'
AND A.USERID = C.USERID
GROUP BY A.TEST_TYPE, A.TEST_DT, B.UNIT
) as t1
UNION
SELECT 'Grand Total','','',SUM(Total_Tests)
FROM (SELECT
Cast(A.TEST_TYPE as Varchar) as TEST_TYPE,cast((CONVERT(CHAR(10),A.TEST_DT,121)) as varchar) as Date_Col, cast(B.UNIT as varchar) UNIT, COUNT(*) AS
'Total_Tests'
FROM USERSCT B, SEARCHPARAM B1, USERTEST A, CUSTOMEXAM C
WHERE ( B.USERID = B1.USERID
AND B.USRACCT = B1.USRACCT
AND ( B.ASOFDATE =
(SELECT MAX(B_ED.ASOFDATE) FROM USERSCT B_ED
WHERE B.USERID= B_ED.USERID
AND B.USRACCT = B_ED.USRACCT
AND B_ED.ASOFDATE <= SUBSTRING(CONVERT(CHAR,GETDATE(),121), 1, 10))
AND B.ASOFTIME =
(SELECT MAX(B_ES.ASOFTIME) FROM PS_EMPLOYEES B_ES
WHERE B.USERID = B_ES.USERID
AND B.USRACCT = B_ES.USRACCT
AND B.ASOFDATE = B_ES.ASOFDATE)
AND B.USERID = A.USERID
AND A.TEST_TYPE = 'CHISQUARE'
AND A.USERID = C.USERID
GROUP BY A.TEST_TYPE, A.TEST_DT, B.UNIT
)as t2
Upvotes: 1