2

我需要从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 - -

其中“-”是一个空条目。

4

1 回答 1

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()函数(在此处记录)。但是,您可能无法指定排序。

于 2013-03-19T21:00:08.107 回答