私はここで同様の例と解決策を見てきましたが、これまでのところ(ありがとう)を得ることができましたが、最後のステップを理解することはできません。理想的には、このソリューションは数十万行を組み合わせるのに効率的です。
基本的に、価格タイプ1と価格タイプ2の異なるタイプの価格データを持つアイテムごとに1行または2行の価格データのテーブルがあります。2つの価格を1つの行に結合したテーブル/ビューになります。ただし、それぞれの相対位置を維持し、価格2データのヌルを許可しました。
したがって、このデータがある場合:
CREATE TABLE Table1 ([Name] varchar(2), [type] char(1), [price] decimal(10,2));
INSERT INTO Table1 ([Name], [type], [price])
VALUES
('a', '1', '1.20'),
('a', '2', '1.25'),
('a1','1', '2.99'),
('b', '1', '2.20'),
('b', '2', '2.25'),
('b1','2', '3.99'),
('c', '1', '3.20'),
('c', '2', '3.25'),
('d', '1', '4.20'),
('d', '2', '4.25');
このSQLを実行できます:
select name, [1] price_1, [2] price_2
from
(
select name,
price,
row_number() over (partition by name
order by type asc) rn
from table1
) o
pivot (min(price) for rn in ([1], [2])) p
そして、私は次の出力を取得しますが、これは私が望むものには完全には正しくありません。
NAME PRICE_1 PRICE_2
a 1.2 1.25
a1 2.99 (null)
b 2.2 2.25
b1 3.99 (null)
c 3.2 3.25
d 4.2 4.25
必要なのは、a1行とb1行のprice_1列にnullがあり、price_2列にpriceがあることです。