2010-06-30 162 views
0

我知道這個問題聽起來像是一個簡單的問題,但讓我解釋一下。我有一個結果集從哪裏獲得SQL - 需要按2個不同列對數據進行分組

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

現在,因爲我有同樣的結果,但隊員們都在不同的列我得到2個結果。我正在尋找一種方法來檢索這樣的結果:

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

這可能嗎?

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

而給你的結果集的查詢看起來像?而你正在查詢的表看起來像?因爲人們沒有Chrystal球,所以在你的問題中提供所有的細節。 – Oded 2010-06-30 07:52:36

回答

1

下面的代碼實現使用一個公共表表達式和一個UNION ALL所期望的結果。數據是使用查詢和結果提供的。

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 

該查詢給出了期望的結果。

Count  Team Score  Team2 Score 
----------- ----- ----------- ----- ----------- 
17   TeamA 1   TeamB 2 
相關問題