Reputation: 291
I am creating a SQL query. My table as follows:-
DECLARE @Tab TABLE
(
Name VARCHAR(10),
NUM INT,
PracticeName VARCHAR(10)
)
INSERT INTO @Tab
VALUES ('A', 25, 'Test'), ('B', 30, 'Test'), ('C', 236, 'Test1'),
('D', 217, 'Test'), ('E', 19, 'Test1')
The query I am using is :
SELECT
PracticeName,
'Total:' + CAST(SUM(NUM) as varchar(10)) + ' ('+
STUFF((SELECT ', ' + Name + ':' + CAST(NUM as varchar(10))
FROM @Tab
FOR XML PATH('')), 1, 1, '') +')'
FROM @Tab
GROUP BY PracticeName
The output I am getting is:
Test Total:272 ( A:25, B:30, C:236, D:217, E:19)
Test1 Total:255 ( A:25, B:30, C:236, D:217, E:19)
I want the output as:-
Test Total:272 ( A:25, B:30, D:217)
Test1 Total:255 (C:236, E:19)
Please help
Upvotes: 1
Views: 242
Reputation: 2481
Just add a where
clause on your stuff()
SELECT PracticeName,'Total:' + CAST(SUM(NUM) as varchar(10)) +' ('+
STUFF(
(
SELECT ', ' + s.Name +':'+ CAST(s.NUM as varchar(10))
FROM @Tab s
WHERE s.PracticeName = m.PracticeName
FOR XML PATH('')
), 1, 1, '') +')'
FROM @Tab m
GROUP BY PracticeName
Upvotes: 1