2017-03-28 3 views
1

Je crée une requête SQL. Ma table comme suit: -Requête SQL pour afficher des données en fonction du nom

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

La requête J'utilise est:

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 

La sortie Je reçois est:

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) 

Je veux la sortie comme: -

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

S'il vous plaît aider

Répondre

1

il suffit d'ajouter une clause where sur votre 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

'Expliquer la solution, le code ne suffit pas. Dites-lui ce qui ne va pas et pourquoi. –