2010-06-30 11 views
0

Je sais que la question semble être une question facile, mais laissez-moi vous expliquer. J'ai un jeu de résultats où je reçoisSQL - Besoin de regrouper les données par 2 colonnes différentes

 Count Team Score Team2 Score 
----------------------------------------- 
     10 TeamA 1 TeamB  2 
     7  TeamB 2 TeamA  1 

Maintenant, parce que j'ai le même résultat, mais les équipes sont dans différentes colonnes, je reçois les 2 résultats. Je cherche un moyen de récupérer le résultat comme ceci:

 Count Team Score Team2 Score 
----------------------------------------- 
     17 TeamA 1 TeamB  2 

Est-ce possible?

EDIT

SELECT TOP 5 SUM([CountryCount]) AS [CountryCount] 
     ,[Country], [CustomFieldB], [CustomFieldC], [CustomFieldD] 
    FROM (
    SELECT COUNT([Country]) AS [CountryCount], [CustomFieldB], [CustomFieldC], [CustomFieldD] 
      ,[Country] 
     FROM (
     SELECT [CustomFieldA] AS [Country], [CustomFieldB], [CustomFieldC], [CustomFieldD] 
      FROM [Target] 
     WHERE [TargetListID] = xxx 
     ) as tbl 
    GROUP 
     BY [Country], [CustomFieldB], [CustomFieldC], [CustomFieldD] 
    ) as T 
GROUP 
    BY [Country], [CustomFieldB], [CustomFieldC], [CustomFieldD] 
ORDER 
    BY [CountryCount] DESC; 
+1

Et la requête qui vous a donné cet ensemble de résultats ressemble à ??? Et les tableaux que vous interrogez ressemblent ??? Donnez tous les détails que vous pouvez dans votre question, car les gens n'ont pas de boules de Chrystal. – Oded

Répondre

1

Le code suivant accomplit les résultats souhaités en utilisant une expression de table commune et un UNION ALL. Les données ont été constituées en utilisant la requête et les résultats fournis.

DECLARE @Target TABLE (
    [TargetListID] int, 
    [CustomFieldA] varchar(5), 
    [CustomFieldB] int, 
    [CustomFieldC] varchar(5), 
    [CustomFieldD] int 
    ) 

INSERT INTO @Target 
    VALUES 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamA', 1, 'TeamB', 2), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1), 
     (1, 'TeamB', 2, 'TeamA', 1) 

;WITH CTE AS (
    SELECT 
      COUNT([CustomFieldA]) AS [Count], 
      [CustomFieldA] AS [Team1], 
      [CustomFieldB] AS [Team1Score], 
      [CustomFieldC] AS [Team2], 
      [CustomFieldD] AS [Team2Score] 
     FROM (
      SELECT 
        [CustomFieldA], 
        [CustomFieldB], 
        [CustomFieldC], 
        [CustomFieldD] 
       FROM @Target 
       WHERE [TargetListID] = 1 
      ) AS tbl 
     GROUP BY 
      [CustomFieldA], 
      [CustomFieldB], 
      [CustomFieldC], 
      [CustomFieldD] 
    ) 
SELECT 
     SUM([Count]) AS [Count], 
     Team1 AS Team, 
     Team1Score AS Score, 
     Team2 AS Team2, 
     Team2Score AS Score 
    FROM (
     SELECT 
       CTE.[Count], 
       CTE.[Team1], 
       CTE.[Team1Score], 
       CTE.[Team2], 
       CTE.[Team2Score] 
      FROM CTE 
      WHERE CTE.[Team1Score] <= CTE.[Team2Score] 
     UNION ALL 
     SELECT 
       CTE.[Count], 
       CTE.[Team2], 
       CTE.[Team2Score], 
       CTE.[Team1], 
       CTE.[Team1Score] 
      FROM CTE 
      WHERE CTE.[Team2Score] < CTE.[Team1Score] 
     ) AS U 
    GROUP BY 
     [Team1], 
     [Team1Score], 
     [Team2], 
     [Team2Score] 
    ORDER BY [Count] DESC 

Cette requête donne le résultat souhaité.

Count  Team Score  Team2 Score 
----------- ----- ----------- ----- ----------- 
17   TeamA 1   TeamB 2 
Questions connexes