に基づいて最終結果を作成している場合sales
、次の結果が得られます。
select distinct x1.product,
x1.type,
x2.totalsales,
case when x1.sales > 0 then y.inventory else 0 end
from x x1
left join
(
select product,
type,
sum(sales) as TotalSales
from x
group by Product, Type
) x2
on x1.product = x2.product
and x1.type = x2.type
left join y
On Y.Product = x1.Product
デモで SQL Fiddle を参照してください
inventory
合計売上高がゼロより大きいのに、サンプル結果にforb
がゼロとしてリストされている理由がわかりません。
編集#1:
あなたのコメントに基づいて、次の使用を検討することをお勧めしますrow_number()
。
select product,
type,
totalsales,
case when rn = 1 then inventory else 0 end inventory
from
(
select x.product,
x.type,
sum(sales) TotalSales,
row_number() over(partition by x.product order by x.type) rn,
y.inventory
from x
inner join y
on x.product = y.product
group by x.product, x.type, y.inventory
) src
デモで SQL Fiddle を参照してください
または、 でグループ化できない場合inventory
は、サブクエリの外で結合します。
select src.product,
src.type,
src.totalsales,
case when rn = 1 then inventory else 0 end inventory
from
(
select x.product,
x.type,
sum(sales) TotalSales,
row_number() over(partition by x.product order by x.type) rn
from x
group by x.product, x.type
) src
inner join y
on src.product = y.product
デモで SQL Fiddle を参照してください