SQL - нужно сгруппировать данные по 2 различным столбцам - PullRequest
0 голосов
/ 30 июня 2010

Я знаю, что вопрос звучит так, как будто это будет простой вопрос, но позвольте мне объяснить.У меня есть набор результатов, в котором я получаю

     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

Возможно ли это?

РЕДАКТИРОВАТЬ

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 Ответ

1 голос
/ 02 июля 2010

Следующий код выполняет желаемые результаты, используя общее табличное выражение и 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...