【问题标题】:How to divide one column into two even row columns in SQL ServerSQL Server中如何将一列分成两个偶数行列
【发布时间】:2021-08-20 16:00:53
【问题描述】:

我有一个查询,它在一列中返回第 n 行。我想将这些行分成两半并放在另一列中。

ITEM
A1
A2
A1
A3
A4
A5
A6
A7
A8
A9
A10
A11

转换为

Col 1 Col 2
A1 A2
A3 A4
A5 A6
A7 A8
A9 A10
A11

【问题讨论】:

  • PIVOT 不是获得所需内容的正确选择,因为 PIVOT 聚合(总和,平均)会导致标题下方的单元格。

标签: sql pivot rows divide


【解决方案1】:

你可以这样做:

SELECT a.col1, b.col1 
FROM (select col1,row_number() over(order by col1) rownum from Test) a
LEFT JOIN (Select col1, lag(col1) over(order by col1) previous from test) b
ON a.col1 = b.previous 
WHERE rownum%2=1

作为测试表和列,这基本上是选择奇数行并将它们与下一行连接起来。

【讨论】:

  • 完美。谢谢
【解决方案2】:

您似乎还想删除重复项。所以,我建议使用dense_rank() 进行聚合:

select max(case when seqnum % 2 = 1 then col1 end),
       max(case when seqnum % 2 = 0 then col1 end)       
from (select col1,
             dense_rank() over (order by col1) as seqnum
      from test
     ) t
group by ceiling(seqnum / 2.0);

注意:这里假定排序基于col1 值。

【讨论】:

  • 谢谢。这也有效。如果我需要超过 2 列,您将如何使用它?
  • 您可以将2.0 更改为n 并在SELECT 中添加额外的max() 表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
相关资源
最近更新 更多