2016-05-16 3 views
0

私は学生のレコードのSQLテーブルを持っていると私は主要の学生の寸法原因のいくつかの重複行を持っているので、今、私はこのような何かを持っているように重複行を削除します。追加の列

ID Major 
---------- 
1 CS 
1 Mgt 

何I

ID Major Major2 
---------- 
1 CS Mgt 

答えて

2

ピボットするには番号が必要です。そして、あなたはpivotまたは条件付きの集約のいずれかを使用して旋回することができる:

select id, 
     max(case when seqnum = 1 then major end) as major_1, 
     max(case when seqnum = 2 then major end) as major_2 
from (select t.*, 
      row_number() over (partition by id order by (select null)) as seqnum 
     from t 
    ) t 
group by id; 

注:あなたは、「2」は専攻をカウントするのに十分な大きさであることを検証する必要があります。

select a.id as id, 
     a.major as major, 
     b.major as major2 
from YOUR_TABLE a 
left join YOUR_TABLE b on 
a.id = b.id 
and (b.major is null or a.major > b.major) 
+0

'id by by order by part 'の'(select null) 'の目的は何ですか? –

+1

OK、これは事実上「どんな順序であれ」を意味することがわかりました。おじゃまします。 –

0

:あなたが使用して最大値を得ることができます直接

SELECT [ID],[CS] AS Major , [Mgt] AS Major2 from Your_Table_Name 
PIVOT 
(max(Major)for [Major] IN ([CS] , [Mgt]))as p 
0

これはあなたの

Select 
ID, 
(select top 1 Major from <Your_Table> where id=T.Id order by Major) Major, 
(case when count(Id)>1 then (select top 1 Major from #temp where id=T.Id order by Major desc) else null end) Major2 
from <Your_Table> T 
Group By 
ID 
0
あなたはピボット機能を使用することができます

を助ける:あなたは、主要なのせいぜい2つの異なる値を持っている場合は

select top 1 id, count(*) 
from t 
group by id 
order by count(*) desc;