0

次のパズルを解決する必要があります (正確には緊急のビジネス割り当て) SQL SERVER 2008

私はこの形のテーブルを持っています

ID    Market      SubMarket     Value
1       1          1              3
2       1          2              6
3       1          3              2
4       2          23             1
5       2          24             9

私は特定の MarketID を持っており、すべての MarketID には特定の SubMarketID があります (最大 5 - それぞれにどのように使用できるかはわかっています)。

このタイプの固定テーブルでデータを変換する必要があります

MarketID  SubMarketAvalue   SubMarketBValue   SubMarketCValue....SubMarketEValue

   1              3                 6                2                  null

   2              1                 9               null                null

SubMarketAValue には、小さい方の SubMarketID の値が含まれている必要があります

SubMarketBValue には、次に大きな SubMarketID の値が含まれている必要があります

4

1 に答える 1

2

RDBMS を指定しませんでしたが、SQL Server 2005 以降、Oracle、および PostgreSQL で以下を使用できます。

select market,
  max(case when rn = 1 then value end) as SubMarketAvalue,
  max(case when rn = 2 then value end) as SubMarketBvalue,
  max(case when rn = 3 then value end) as SubMarketCvalue,
  max(case when rn = 4 then value end) as SubMarketDvalue,
  max(case when rn = 5 then value end) as SubMarketEvalue
from 
(
  select id, market, submarket, value,
    row_number() over(partition by market 
                      order by market, submarket) rn
  from yourtable
) x
group by market

SQL Fiddle with Demoを参照してください

于 2012-09-24T16:59:49.763 に答える