SQL-запрос, который получит отдельный тип, марку и модель, но подсчитает, сколько дубликатов было найдено - PullRequest
1 голос
/ 09 мая 2011

У меня есть таблица «Конкурент», и вот некоторые из ее столбцов:

Type | Brand | Model | Date | Resolution | etc.

Таблица будет содержать дубликаты Model записей (с явно одинаковыми Brand, но, возможно, с другимType (два возможных типа: «ProAV» и «Disti»)).Мне нужно создать запрос, который будет выводить таблицу следующим образом:

Top (ProAV) | Top (Disti) | Last Occurrence | Brand | Model | Resolution | etc.

По сути, мне нужен запрос, который получит отличный тип, марку и модель, но получит счетиз числа найденных дубликатов и поместите это число либо в Top (ProAV), либо в Top (Disti), в зависимости от того, какое значение Type имеет.Мне нужно было бы извлечь самую последнюю (заданную дату) из дубликатов, чтобы я мог поставить ее дату в поле Last Occurrence.Я надеюсь, что это имеет смысл, дайте мне знать, если это не так.

Ответы [ 2 ]

2 голосов
/ 09 мая 2011
SELECT SUM(CASE WHEN Type = 'ProAV' THEN 1 ELSE 0 END) AS TopProAV,
       SUM(CASE WHEN Type = 'Disti' THEN 1 ELSE 0 END) AS TopDisti,
       MAX(Date) AS LastOccurence,
       Brand, Model, Resolution
    FROM Competitor
    GROUP BY Brand, Model, Resolution

РЕДАКТИРОВАТЬ : На основании комментария вы можете использовать подзапрос или CTE , чтобы выполнить то, что вы хотите. Что-то вроде:

WITH cteMaxDate AS (
    SELECT SUM(CASE WHEN Type = 'ProAV' THEN 1 ELSE 0 END) AS TopProAV,
           SUM(CASE WHEN Type = 'Disti' THEN 1 ELSE 0 END) AS TopDisti,
           MAX(Date) AS LastOccurence,
           Brand, Model, Resolution
        FROM Competitor
        GROUP BY Brand, Model, Resolution
)
SELECT md.TopProAV, md.TopDisti,
       md.LastOccurentce, 
       md.Brand, md.Model, md.Resolution,
       c.AdditionalColumn1, c.AdditionalColumn2
    FROM cteMaxDate md
        INNER JOIN Competitor c
            ON md.Brand = c.Brand
                AND md.Model = c.Model
                AND md.Resolution = c.Resolution
                AND md.LastOccurence = c.Date
1 голос
/ 09 мая 2011

У вас есть ограниченное количество Type с? В этом случае вы можете решить вашу проблему с помощью Pivot Более конкретно, для стола

Type    Model
----    -----
A       X
B       X
C       Y
A       Z
NULL    NULL

вы выполняете этот запрос

Select Model, [A], [B], [C]
From
(select Model, Type
from dbo.Competitor) as SourceTable
PIVOT
(Count([Type]) for [Type] in ([A], [B], [C])) as PivotTable 

чтобы получить

Model    A    B    C
------   -    -   -
X        1    1   0
Y        0    0   1
Z        1    0   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...