2016-04-07 28 views
0

Başka bir sütunda bulunan her bir kimliğe göre farklı öğe sayısını saymak istiyorum. ÖrneğinGruplara göre gruplara göre ayırma sayısı

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

Red 2 ayrı değerlere sahip olduğunu göstermek sayımı istiyor ve Mavi yalnızca ayrı sayısı 1. vardır Ve bu farklı değerlerin yüksek olması satırların kurtulmak 1'den büyüktür. Bu durumda renk için Kırmızı ve değer için 2 yazan satırlardan kurtulmak istiyorum.

Color  Value 
Red  1 
Red  1 
Blue  3 
Blue  3 

İşte benim gerçek sorgu: Bu durumda FormSectionID renk olacağını ve myrank değeri olur. Bunu bir alt sorgu olarak kullanmanın ve istediğimi almanın bir yolu var mı?

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 Veri

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

Neden beklenen sonuçta 2 satır Mavi var? – Squirrel

+0

Farklı sayılar mavi değerler için 1'den büyük olamaz. Mavi için değerler sadece 3 içerir. – James

+0

@Squirrel Sadece o gruptaki minimum değer olmayan bir renk grubu için herhangi bir değeri filtrelemek istediğini düşünüyorum. –

cevap

1

Bir alt sorgu ile akıllı INNER JOIN kullanabilirsiniz:

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

Bu – James

+0

deneyeceğim Ben c1.Value için, aslında benim durumumdaki bir takma addır. Geçersiz sütun adı derken, bu konuyla ilgili bir yol biliyor musunuz? – James

+0

Bize gerçek verilerinizi gösterme hatasını yaptınız. Lütfen sorunuzu güncelleyin. –

0

istediğiniz bu mu?

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 
İlgili konular