2016-05-17 8 views
3

私は約50kレコードのテーブルを持っています。私は一度だけと鳥一度だけというように猫を挿入したい個別の列として値を挿入するにはどうすればよいですか?

Animal | Name | Color | Legs 
Cat |George| Black | 4 
Cat | Bob | Brown | 4 
Cat | Dil | Brown | 4 
Bird | Irv | Green | 2 
Bird | Van | Red | 2 

など

:それは次のようになります。名前/色/脚などは、見つけた最初の値でなければなりません。

この表には、10列と50k行があります。

私はinsert into MyNewTable Select Distinct * From MyAnimalTableを試しましたが、うまくいかなかった。私もgroup byを試しましたが、どちらもうまくいきませんでした。

+1

*名前/色/脚などは全身にする必要があります*最初にどのフィールドに従っていますか? –

+0

ここに「最初」はありません。挿入する猫を選ぶ方法は? – jarlh

+0

名前、色、脚が一貫していなければなりません(ジョージ/ブラック、ボブ/ブラウン、Dil /ブラウンは許可されますが、ジョージ/ブラウン、ボブ/ブラック、Dil/ –

答えて

3

動物名のみでグループを使用し、Max()から残りの列を選択して最初の所見を取得します。

insert into MyNewTable 
Select MAT.Animal,max(MAT.Name),max(MAT.Color),max(MAT.Legs) 
From MyAnimalTable MAT GROUP BY MAT.Animal 
+0

ありがとうMat.etc本当に必要ですか? –

+0

単なる問い合わせで何度も審査しているテーブルをよく理解するためにテーブルエイリアスを持つのは良いことです。 –

2

使用ROW_NUMBER動物あたりの行数を数えるのみ1

insert into mynewtable (animal, name, color, legs) 
select animal, name, color, legs 
from 
(
    select 
    animal, name, color, legs, 
    row_number() over (partition by animal order by animal) as rn 
    from myanimaltable a 
) numbered 
where rn = 1; 

(この番号を任意の動物ごとのレコード番号を付けたものを維持する。あなたは動物ごとに最初のレコードを取得するので、「DBMSが見つかりました」。特定の順序が必要な場合は、パーティション節の後にこれを指定する必要があります。

+0

質問に間違いがたくさんあります –

+0

@Prdp:この有益なコメントありがとうございます。 –

+0

'row_number()(動物列順[列順])は です。[順序列]は、最初の行を決定する列でなければなりません。 –

0

あなたが次のことを試すことができ

SELECT A.Animal 
    ,B.NAME 
    ,C.color 
    ,A.Legs 
FROM (
    SELECT DISTINCT Animal 
     ,Legs 
    FROM tablename 
    ) A 
CROSS JOIN (
    SELECT DISTINCT NAME 
    FROM tablename 
    ) B 
CROSS JOIN (
    SELECT DISTINCT Color 
    FROM tablename 
    ) C 
0

、このようにしてみてください。

INSERT INTO MYNEWTABLE 
select Animal,Name,Color,legs from 
(select distinct Animal,Name,Color,legs,dense_rank() over(partition by animal) 
as rnk from table) AS T 
0

クエリのベストシンプルなソリューション

​​
関連する問題