我建议你这个使用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查询必须返回固定数量的列。你不能有一个查询有时返回三列,有时四个** –