我建議你這個使用row_number()
和有條件的聚集做:
select t.animal,
max(case when seqnum = 1 then livein end) as Column1,
max(case when seqnum = 2 then livein end) as Column2
from (select t.*, row_number() over (partition by animal order by (select NULL)) as seqnum
from t
) t
group by t.animal;
請注意,您沒有辦法表達數據中列的排序--SQL表本質上是無序的。以上選擇任意排序。如果您有id
或CreatedAt
列,則可以使用它來指定順序。
由於沒有訂貨,下面也做了相當的工作:
select t.animal, min(t.LiveIn) as Column1,
(case when min(t.LiveIn) <> max(t.LiveIn) then max(t.LiveIn) end) as Column2
from t
group by t.animal;
編輯:
SQL查詢必須返回列的固定數量。你不能有一個查詢有時返回三列,有時四個。你可以,但是,調整的查詢返回較大的列數,通常可能是NULL
:
select t.animal, count(*) as NumLiveIn,
max(case when seqnum = 1 then livein end) as Column1,
max(case when seqnum = 2 then livein end) as Column2,
max(case when seqnum = 3 then livein end) as Column3,
max(case when seqnum = 4 then livein end) as Column4
from (select t.*, row_number() over (partition by animal order by (select NULL)) as seqnum
from t
) t
group by t.animal;
在這種情況下,我也對環境的數量增加一列,以及。
我不知道有多少列會有。例如,如果有另一個數據需要一隻鳥,它居住在海,水和天空中。我怎樣才能做到這一點。這真的不可能嗎?如果出現這樣的要求,我應該怎麼做? –
我不會爲命令而煩惱,它對我來說真的不重要!謝謝 –
請大膽**這個SQL查詢必須返回固定數量的列。你不能有一個查詢有時返回三列,有時四個** –