簡體   English   中英

如何將值作為不同的列插入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM