2017-03-28 55 views
1

我正在創建一個SQL查詢。我的表如下: -用於顯示基於名稱的數據的SQL查詢

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') 

我使用的查詢是:

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 

我得到的輸出是:

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) 

我想要的輸出: -

Test  Total:272 (A:25, B:30, D:217) 
Test1  Total:255 (C:236, E:19) 

請幫忙

回答

1

只要您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 
+0

'解釋解決方案添加where條款,代碼是不夠的。告訴他/她什麼是錯的,爲什麼 –