SQL - Поле имеет два значения для записи, хотите показать только одно из значений на основе итога в другом поле, а затем показать итоги для обоих значений - PullRequest
0 голосов
/ 08 января 2020

Итак, я пытаюсь создать список из первой десятки, но у некоторых компаний есть 2 BUSTYPES, связанные с, я хочу, чтобы результат суммировал значения, в то же время включая только BUSTYPE, связанный с большим значением

Пример запроса

SELECT TOP 10 ID, COMPANY, BUSTYPE, sum(value) as VALUES
FROM TABLE
GROUP BY ID, COMPANY, BUSTYPE
ORDER BY VALUES desc

Соответствующая выходная таблица 1:

ID   COMPANY   BUSTYPE  VALUES
123  orange     Large    1820

Соответствующая выходная таблица 2:

ID   COMPANY   BUSTYPE  VALUES
123  orange     Small    294

IDEAL TABLE Конечный результат (2114 = 1820 + 294) и Большее значение связано с Большим Bustype, поэтому оно отображается

ID   COMPANY   BUSTYPE  VALUES
123  orange     Large    2114

Также прикрепление изображения для дальнейшей визуализации enter image description here

Моя конечная цель для этого создать таблица, к которой я могу присоединиться по умолчанию к BUSTYPE в моей основной таблице, поэтому мне не нужно беспокоиться о компании, имеющей 2 BUSTYPE

, или найти способ сделать это с моим ВСЕМ НАБОРОМ ДАННЫХ!

1 Ответ

1 голос
/ 08 января 2020

Вы можете использовать оконные функции:

SELECT TOP 10 ID, COMPANY,
       MAX(CASE WHEN seqnum = 1 THEN BUSTYPE END) as BUSTYPE, 
       SUM(value) as VALUES
FROM (SELECT T.*,
             ROW_NUMBER() OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS seqnum
      FROM TABLE T
     ) T
GROUP BY ID, COMPANY
ORDER BY VALUES desc;

Вы также можете использовать FIRST_VALUE(), поэтому вам не нужно условное агрегирование:

SELECT TOP 10 ID, COMPANY, FIRST_BUSTYPE, 
       SUM(value) as VALUES
FROM (SELECT T.*,
             FIRST_VALUE(BUSTYPE) OVER (PARTITION BY ID, COMPANY ORDER BY VALUE DESC) AS FIRST_BUSTYPE
      FROM TABLE T
     ) T
GROUP BY ID, COMPANY, FIRST_BUSTYPE
ORDER BY VALUES desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...