2014-09-03 43 views
1

我有每個項目有一個計數器對甲骨文選擇支點查詢中使用通用列名

Customer 
    Name    Value 
    Bob     3 
    Bob     4 
    Sam     0 
    Sam     1 
    Joe     9 

我想下面的結果

Customer 
    Name    Value1   Value2 
    Bob     3    4 
    Sam     0    1 
    Joe     9 

我的表把相鄰行自己的計數器部分已閱讀此主題,Oracle query to put rows at odd number adjacent to even number,但我想避免使用MOD功能,而不是使用主軸代替。

+0

是否有可能有三個或鮑勃移動價值? – zaratustra 2014-09-03 14:15:03

+0

不,每個名字將不會超過2個 – user1713114 2014-09-03 14:24:00

+0

您將如何處理無盡的報告?你期望XML或什麼? – zaratustra 2014-09-03 14:28:24

回答

1

這裏不能用樞軸聲明,如果你只有兩個爲每名(它也可以與日期,因爲我們可以用最大值和最小值的日期)值:

select name, min(value) value1, nullif(max(value), min(value)) value2 
    from customer_tables 
group by name 

如果Bob ,Sam和其他有更多的兩個值:

with t (Name, Value) as (
select 'Bob',3 from dual union all 
select 'Bob',4 from dual union all 
select 'Sam',0 from dual union all 
select 'Sam',1 from dual union all 
select 'Joe',9 from dual 
), t1 (name, value, rn) as (
select name, value, ROW_NUMBER() OVER(partition by name order by value) from t 
) 
select * from t1 
pivot XML (
    max(value) 
    for rn in (ANY) 
) 

SQL> l 
    1 with t (Name, Value) as (
    2 select 'Bob',3 from dual union all 
    3 select 'Bob',4 from dual union all 
    4 select 'Sam',0 from dual union all 
    5 select 'Sam',1 from dual union all 
    6 select 'Joe',9 from dual 
    7 ), t1 (name, value, rn) as (
    8 select name, value, ROW_NUMBER() OVER(partition by name order by value) from t 
    9 ) 
10 select * from t1 
11 pivot XML (
12 max(value) 
13 for rn in (ANY) 
14*) 
SQL>/

NAM RN_XML 
--- -------------------------------------------------------------------------------- 
Bob <PivotSet><item><column name = "RN">1</column><column name = "MAX(VALUE)">3</col 
    umn></item><item><column name = "RN">2</column><column name = "MAX(VALUE)">4</co 
    lumn></item></PivotSet> 

Joe <PivotSet><item><column name = "RN">1</column><column name = "MAX(VALUE)">9</col 
    umn></item></PivotSet> 

Sam <PivotSet><item><column name = "RN">1</column><column name = "MAX(VALUE)">0</col 
    umn></item><item><column name = "RN">2</column><column name = "MAX(VALUE)">1</co 
    lumn></item></PivotSet> 

瞭解更多關於支點here

+0

有趣。如果價值是約會呢?你如何解決這個問題? – user1713114 2014-09-03 14:29:26

+0

nvm,我得到它的工作 – user1713114 2014-09-03 14:31:01

+0

堅持下來,我爲Bob,Sam和其他人創造了無盡的記錄查詢 – zaratustra 2014-09-03 14:33:35