求一条sql一行变多行
包裹表x_tm_package
包裹id 包裹号
001 12562
002 44444
包裹明细表x_tm_package_detail
包裹明细id 包裹id 退换数量 换货数量 拒收数量 数量
1111 001 1 1 1 4
1112 002 1 1 0 4
1113 002 1 0 1 2
select *from (select pack.package_id,
pack.PACKAGE_NUMBER,
pack.order_id,
packde.return_quantity,
packde.EXCHANGE_QUANTITY,
packde.REJECTION_QUANTITY
from X_TM_PACKAGE pack
left join x_tm_package_detail packde on pack.package_id =
packde.package_id
order by pack.package_id) BTA
执行该sql的显示结果为:
包裹id 包裹明细id 包裹号 退换数量 换货数量 拒收数量 数量
001 1111 12562 1 1 1 4
002 1112 44444 1 1 0 4
002 1113 44444 1 0 1 2
现在要求每一条单据只要退换数量>0显示为一行,换换数量>0显示为一行,拒收数量>0显示为一行,数量-退换数量-换货数量-拒收数量>0显示为一行
需要显示结果为:
包裹id 包裹明细id 包裹号 售后状态
001 1111 12562 退货
001 1111 12562 换货
001 1111 12562 拒收
001 1111 12562 正常
002 1112 44444 退货
002 1112 44444 换货
002 1112 44444 正常
002 1113 44444 退货
002 1113 44444 拒收
[解决办法]
select b.包裹id,b.包裹明细id,a.包裹号,'退换' 售后状态from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹idwhere 退换数量 <> 0union allselect b.包裹id,b.包裹明细id,a.包裹号,'换货' 售后状态from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹idwhere 换货数量 <> 0union allselect b.包裹id,b.包裹明细id,a.包裹号,'拒收' 售后状态from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹idwhere 拒收数量 <> 0union allselect b.包裹id,b.包裹明细id,a.包裹号,'正常' 售后状态from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹idwhere 数量 <> 0order by 包裹id,包裹明细id
[解决办法]