2014-09-03 42 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