[英]How can I insert values as a distinct column?
我有一張約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
等等
我想只插入一次Cat和Bird只插入一次,依此類推。 名稱/顏色/腿等應該是它找到的第一個值。
該表有10列和50k行。
我嘗試insert into MyNewTable Select Distinct * From MyAnimalTable
,但這不起作用。 我也嘗試了group by
,但也沒有工作。
使用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發現”。如果你想要任何特定的順序,你必須在分區條款之后指定它。)
您只能在動物名稱上使用group by,並從Max()中選擇列的其余部分以獲得第一個結果。
insert into MyNewTable
Select MAT.Animal,max(MAT.Name),max(MAT.Color),max(MAT.Legs)
From MyAnimalTable MAT GROUP BY MAT.Animal
試試這樣,
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
您可以嘗試以下方法:
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
最簡單的解決方案
select
Animal,
(select top 1 name from MyAnimalTable where animal=T.animal) Name,
(select top 1 Color from MyAnimalTable where animal=T.animal) Color,
(select top 1 Legs from MyAnimalTable where animal=T.animal) Legs
from MyAnimalTable T group by Animal
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.