我需要从h2数据库中的多个列中选择不同的值,以便根据数据库中的内容为用户提供建议列表。换句话说,我需要像
这样的东西SELECT DISTINCT a FROM table
SELECT DISTINCT b FROM table
SELECT DISTINCT c FROM table
在一个查询中。在案例中我不够清楚,我想要一个给出这个表的查询(列ID,事物,其他,东西)
0 a 5 p
1 b 5 p
2 a 6 p
3 c 5 p
会产生类似这样的东西
a 5 p
b 6 -
c - -
其中' - '是空条目。
答案 0 :(得分:2)
这有点复杂,但你可以这样做:
select max(thing) as thing, max(other) as other, max(stuff) as stuff
from ((select row_number() over (order by id) as seqnum, thing, NULL as other, NULL as stuff
from (select thing, min(id) as id from t group by thing
) t
) union all
(select row_number() over (order by id) as seqnum, NULL, other, NULL
from (select other, min(id) as id from t group by other
) t
) union all
(select row_number() over (order by id) as seqnum, NULL, NULL, stuff
from (select stuff, min(id) as id from t group by stuff
) t
)
) t
group by seqnum
这样做是为每列中的每个不同值分配一个序列号。然后,它将这些组合在一起,形成每个序列号的单行。该组合使用union all
/ group by
方法。替代配方使用full outer join
。
此版本使用id
列来保持值与原始数据中显示的顺序相同。
在H2(最初不在问题中),您可以使用rownum()
函数(记录为here)。但是,您可能无法指定顺序。