日期:2014-05-18  浏览次数:20435 次

求一条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 拒收




------解决方案--------------------
SQL code

select b.包裹id,b.包裹明细id,a.包裹号,'退换' 售后状态
from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹id
where 退换数量 <> 0
union all
select b.包裹id,b.包裹明细id,a.包裹号,'换货' 售后状态
from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹id
where 换货数量 <> 0
union all
select b.包裹id,b.包裹明细id,a.包裹号,'拒收' 售后状态
from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹id
where 拒收数量 <> 0
union all
select b.包裹id,b.包裹明细id,a.包裹号,'正常' 售后状态
from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹id
where 数量 <> 0
order by 包裹id,包裹明细id

------解决方案--------------------
探讨

引用:

SQL code

select b.包裹id,b.包裹明细id,a.包裹号,'退换' 售后状态
from x_tm_package a join x_tm_package_detail b on a.包裹id = b.包裹id
where 退换数量 <> 0
union all
select b.包裹id,b.包裹明细id,a.包裹号,……

------解决方案--------------------
探讨

有没人帮我解决??