2016-04-07 3 views
0

Я хочу подсчитать количество отдельных элементов на основе каждого идентификатора в другом столбце.Подсчитайте различные элементы на основе группы по предложению

Например

Color  Value 
Red  1 
Red  1 
Red  2 
Red  2 
Blue  3 
Blue  3 

Я хочу, чтобы счетчик, чтобы показать, что Red имеет 2 различных значения и Синие имеет только 1. И избавиться от строк, которые имеют более высокие из этих различных значений, когда подсчет различного больше 1. В этом случае я хотел бы избавиться от строк, которые говорят «Красный» для цвета и 2 для значения.

Color  Value 
Red  1 
Red  1 
Blue  3 
Blue  3 

Вот мой реальный вопрос: В этом случае FormSectionID бы цвет и myrank будет значение. Есть ли способ использовать это как подзапрос и получить то, что я хочу?

SELECT DISTINCT TFormSectionID AS FormSectionID, 
    TFSSortOrder AS SectionSortOrder, 
    TSectionItemID AS SectionItemID, 
    TrendType, 
    DENSE_RANK() OVER (ORDER BY TFSSortOrder) AS myrank 
FROM Report.TrendData 
WHERE (ProgramID = 9) AND (TrendType > 0) 

Real Data

FormSectionID SectionSortOrder SectionItemID TrendType Rank 
12     7     90   1    1 
12     7     91   1    1 
12     7     154   1    1 
12     7     528   1    1 
12     9     154   1    2 
12     9     528   1    2 
+0

Почему в вашем ожидаемом результате есть 2 ряда Blue? – Squirrel

+0

Поскольку отдельный счетчик не будет больше 1 для значений синего. Значения для синего только содержат 3. – James

+0

@Squirrel Я думаю, он просто хочет отфильтровать любое значение для группы цветов, которая не является минимальным значением в этой группе. –

ответ

1

Вы можете использовать умный INNER JOIN с подзапроса:

SELECT c1.Color, c1.Value 
FROM colors c1 
INNER JOIN 
(
    SELECT Color, MIN(VALUE) AS minValue 
    FROM colors 
    GROUP BY Color 
) c2 
    ON c1.Color = c2.Color AND c1.VALUE = c2.minValue 
+0

Я попробую это – James

+0

Для c1.Value это на самом деле псевдоним в моем случае. Это говорит о недопустимом имени столбца, знаете ли вы, как это сделать. – James

+0

Вы сделали ошибку, не указав нам свои настоящие данные. Пожалуйста, обновите свой вопрос. –

0

Это то, что вы хотите?

declare @tbColor as table (color nvarchar(5),value int) 

insert into @tbColor select 'Red','1' 
insert into @tbColor select 'Red','1' 
insert into @tbColor select 'Red','2' 
insert into @tbColor select 'Red','2' 
insert into @tbColor select 'Red','3' 
insert into @tbColor select 'Blue','3' 
insert into @tbColor select 'Blue','3' 
insert into @tbColor select 'Blue','4' 

select color,value,count(*) as distinctValue from @tbcolor group by color,value 
Смежные вопросы