2012-02-15 29 views
-1

我想要得到的第一排,每GV(TeacherID)獲取第一排爲一組

GV | Class| SUM 
GV1| L001 | 5000 
GV1| L002 | 5000 
GV1| L003 | 5000 
GV2| L002 | 7000 
GV2| L003 | 7000 
GV2| L001 | 7000 
GV3| L001 | 8000 
GV3| L002 | 8000 
GV3| L003 | 8000 

幫助我。

回答

2

編輯:好吧,現在你已經編輯了這個問題,使這個答案看起來完全不相關...嘆...我會離開它,以防它可以幫助你開始。乾杯。


最簡單的解決方案給您的規格:

select teacherid 
    from mytable 
group by teacherid; 

如果您需要在除了teacherid其他信息:

select teacherid, ...other cols... 
    from (select teacherid, ...other cols... 
       row_number() over (
        partition by teacherid 
        order by classid /* or class as per edit */) as row_num 
      from mytable) my_derived_table 
    where my_derived_table.row_num = 1; 

買者自負:我沒有的安裝SQL-Server方便測試,因此語法可能不完全正確;但它很接近。

+0

太感謝你了。但方式2是正確的,我需要。 – Khanh 2012-02-15 02:55:13

1
WITH T AS (
    SELECT yourTable.*, ROW_NUMBER() OVER(PARTITION BY TeacherID 
     ORDER BY ClassID) AS RN 
    FROM yourTable 
) 
SELECT * 
FROM T 
WHERE RN = 1 
+0

這很有趣。非常感謝你 – Khanh 2012-02-15 02:54:21

1

DDL

create table #t 
(
    GV varchar(4), 
    Class varchar(4), 
    [SUM] int 
) 

樣本記錄

insert into #t(GV, Class, [SUM])values('GV1', 'L001', 5000) 
insert into #t(GV, Class, [SUM])values('GV1', 'L002', 5000) 
insert into #t(GV, Class, [SUM])values('GV1', 'L003', 5000) 
insert into #t(GV, Class, [SUM])values('GV2', 'L002', 7000) 
insert into #t(GV, Class, [SUM])values('GV2', 'L003', 7000) 
insert into #t(GV, Class, [SUM])values('GV2', 'L001', 7000) 
insert into #t(GV, Class, [SUM])values('GV3', 'L001', 8000) 
insert into #t(GV, Class, [SUM])values('GV3', 'L002', 8000) 
insert into #t(GV, Class, [SUM])values('GV3', 'L003', 8000) 

查詢

Select GV, class, [sum] from 
(
    Select Row_Number() Over(Partition by GV Order by GV) as RowId, * from #t 
)K 
Where RowId = 1 

drop table #t 

結果集

GV class sum 
---- ----- ---- 
GV1 L001 5000 
GV2 L002 7000 
GV3 L001 8000 
+0

非常感謝。你好 – Khanh 2012-02-20 03:44:57

+0

如果它解決了你的問題,請標記爲答案。 – Pankaj 2012-02-22 07:41:52