由于误读了一个问题,我偶然发现了一些我无法做到的事情。我有一张名字表:
Name
A
B
C
D
E
F
我想将它们输出为:
A B
C D
E F
我无法在SQL中找到这样做,即使它在SQL之外也是微不足道的。这可能吗?
答案 0 :(得分:0)
这样做的规范方法是使用row_number()
。让我假设排序不重要或者您有一些指定排序的列,我将调用id
。 SQL表表示无序集,因此表中没有排序;只有列表示的排序。
一种典型的方法是:
select max(case when seqnum % 2 = 0 then name end) as name1,
max(case when seqnum % 2 = 1 then name end) as name2
from (select name, row_number() over (order by id) - 1 as seqnum
from t
) t
group by floor(seqnum / 2);
请注意,某些数据库使用mod()
函数而不是%
来计算余数。
答案 1 :(得分:0)
与戈登相似。如您所见,有多种方法:
with data as (
select Name, row_number() over (order by Name) - 1 as seq /* start at zero */
from T
)
select d1.Name, d2.Name
from
data d1 left outer join data d2 on d2.seq = d1.seq + 1
where
d1.rn % 2 = 0
Gordon的方法的一个优点是,您可以轻松地更改为两列而不涉及额外的连接。