SQL重新排列行
我有查询和返回值SQL重新排列行,sql,sql-server,Sql,Sql Server,我有查询和返回值 select * from table1 结果: Dept classin classincount classout classoutcount ---------------------------------------------------------- DeptA ClassA 2 NULL NULL DeptA ClassB 4 NULL NUL
select * from table1
结果:
Dept classin classincount classout classoutcount
----------------------------------------------------------
DeptA ClassA 2 NULL NULL
DeptA ClassB 4 NULL NULL
DeptA NULL NULL ClassC 1
DeptA NULL NULL ClassD 6
DeptA ClassF 5 NULL NULL
我希望回报像这样:
Dept classin classincount classout classoutcount
----------------------------------------------------------
DeptA ClassA 2 ClassC 1
DeptA ClassB 4 ClassD 6
DeptA ClassF 5 NULL NULL
我需要你的帮助。谢谢。如果我将此理解为希望根据计数列(从最小到最大)对齐列,则可以使用聚合或联接来实现
select coalesce(ci.dept, co.dept) as dept,
ci.classin, ci.classincount,
co.classout, co.classoutcount
from (select t.*,
row_number() over (partition by dept order by classincount asc) as seqnum
from t
where classincount is not null
) ci full join
(select t.*,
row_number() over (partition by dept order by classoutcount asc) as seqnum
from t
where clssoutcount is not null
) co
on ci.dept = co.dept and ci.seqnum = co.seqnum
ClassC
与ClassA
有什么关系?合并行的规则是什么?SQL表表示无序集,因此没有排序。ClassC
可以与ClassB
对齐吗?没有关系,只有值名。而且不需要命令。除掉NULL@user13549459,很高兴你找到了一个有用的答案。请考虑通过点击左边的灰色复选标记来接受答案。它会奖励回答问题的人一些声望点数,你也会得到一些。