2013-09-18 5 views
1

Я хотел бы свернуть оператор select. Столбцы «Страна», «Магазин» и «Продажи».Oracle PIVOT a select statement

Теперь я хотел бы иметь выход как:

  Store1 Store2 Store3 
Country1 2342 2342 5675 
Country2 5753 3274 7326 
Country3 1543 4367 3367 

Поэтому в основном мне нужно SalesCount для каждого магазина, для каждой страны.

Входной приходит из (пример):

Country: StoreNr: ProductSold: 
Belgium   23    Car 
Belgium   23   House 
Netherland  23    Car 

выход будет:

   Store23 
Belgium   2 
Netherlands  1 
+0

С какого ввода вы хотели бы видеть этот вывод? –

+0

смотрите выше, обновленный вопрос. – user2428207

+0

У вас есть конечное количество магазинов? Откуда вы знаете, сколько у вас есть? – Ben

ответ

2

Если количество магазинов конечно, вы можете использовать один из этих подходов:

  1. Использование count() совокупная функция в сочетании с case выражение:

    -- sample of data. just for the sake of demonstration 
    SQL> with t1(Country, StoreNr, ProductSold) as(
        2 select 'Belgium' , 23, 'Car' from dual union all 
        3 select 'Belgium' , 23, 'House' from dual union all 
        4 select 'Netherland', 23, 'Car' from dual union all 
        5 select 'Belgium' , 25, 'House' from dual 
        6 ) 
        7 select country 
        8  , count(case 
        9     when StoreNr = 23 
    10     then 1 
    11    end) as storeNr_23 
    12  , count(case 
    13     when StoreNr = 25 
    14     then 1 
    15    end) as storeNr_25 
    16 from t1 
    17 group by country 
    18 ; 
    

    Результат:

    COUNTRY STORENR_23 STORENR_25 
    ---------- ---------- ---------- 
    Belgium    2   1 
    Netherland   1   0 
    
  2. Начиная с Oracle 11g и выше, оператор pivot следующим образом:

    select * 
        from (Select country as country 
          , country as country_cnt 
          , StoreNr 
         from t1) 
    pivot(        -- list all store numbers here 
        count(country_cnt) for storenr in ( 23 as StoreNr_23 
                 , 25 as StoreNr_25) 
    )          
    

    Результат:

    COUNTRY STORENR_23 STORENR_25 
    ---------- ---------- ---------- 
    Belgium    2   1 
    Netherland   1   0