想象一下,我有一张如下表:
|-----|-------|
| KEY | VALUE |
|-----|-------|
| A | 0 |
| B | 1 |
| C | 0 |
|-----|-------|
我想做的是执行一个SQL查询,它会给我一个如下表:
|---------------|------------|
| Without Value | With Value |
|---------------|------------|
| A | B |
| C | |
|---------------|------------|
所以A列是Active = 1而B列是Active = 0的地方。但我的SQL是基本的,我不知道如何实现这一点(如果它可能的话)。有人有什么想法吗?
这在Oracle DB上。
答案 0 :(得分:4)
您可以使用带有值的键列表与不带值的键之间的完全外部联接来执行此操作:
select no_val.key as "Without value", with_val.key as "With Value"
from (
select key, row_number() over (order by key) as rn
from kv
where value = 0
) no_val
full outer join (
select key, row_number() over (order by key) as rn
from kv
where value = 1
) with_val
on no_val.rn = with_val.rn;
答案 1 :(得分:1)
您可以通过使用ROW_NUMBER()
分析函数为每一行提供索引,然后使用PIVOT
:
SELECT Without_Value, With_Value
FROM ( SELECT t.*,
ROW_NUMBER() OVER ( PARTITION BY Value ORDER BY ROWNUM ) AS idx
FROM table_name t )
PIVOT ( MAX( Key ) FOR Value IN ( 0 AS Without_Value, 1 AS With_Value ) );
<强>输出:
WITHOUT_VALUE WITH_VALUE
------------- ----------
A B
C
答案 2 :(得分:0)
这应该有帮助
select case when value=0 then key else null end as "Without Value",case when value=1 then key else null end as "With Value" from key_value