我有这些结果:
COL1 | COL2 | COL3 | COL4 | COL5 | ID |
-------|-------|-------|-------|-------|-----|
1 | 0 | 0 | 0 | 0 | 9 |
0 | 0 | 0 | 0 | 5 | 9 |
0 | 2 | 0 | 0 | 0 | 9 |
0 | 0 | 0 | 4 | 0 | 9 |
我想顺序值与非空值第一组ID列;
COL1 | COL2 | COL3 | COL4 | COL5 | ID |
-------|-------|-------|-------|-------|-----|
1 | 2 | 4 | 5 | 0 | 9 |
我的查询;select max(COL1), max(COL2), max(COL3), max(COL4), max(COL5), ID FROM MY_TABLE GROUP BY ID
于是,我问他。
COL1 | COL2 | COL3 | COL4 | COL5 | ID |
-------|-------|-------|-------|-------|-----|
1 | 2 | 0 | 4 | 5 | 9 |
EDIT实际上my_table是子查询表。子查询可能会混淆。我原来的table是:
ID | VALUE | SPEC_ID
----|-------|--------
1 | 1 | 9
2 | 2 | 9
3 | 4 | 9
4 | 5 | 9
5 | 1 | 8
6 | 3 | 8
我想要:
COL1 | COL2 | COL3 | COL4 | COL5 | ID |
-------|-------|-------|-------|-------|-----|
1 | 2 | 4 | 5 | 0 | 9 |
1 | 3 | 0 | 0 | 0 | 8 |
2条答案
按热度按时间vom3gejh1#
在Oracle中,您可以使用
ROW_NUMBER
分析函数对行进行排序,然后使用PIVOT
将它们从行透视到列:其中,对于样本数据:
输出:
| COL1|COL2|COL3|COL4|COL5|ID|
| --------------|--------------|--------------|--------------|--------------|--------------|
| 1|三|0|0|0|八个|
| 1|二|四|五|0|九|
fiddle
ego6inou2#
你没有提到数据库,所以我假设它是PostgreSQL。
这肯定是非关系逻辑,因此查询最终会不必要地变长。您可以:
结果:
请参见db<>fiddle上的运行示例。
EDIT:我更新了按ID分组的解决方案。