当前位置: 代码迷 >> Sql Server >> 求一条sql一行变多行,该如何解决
  详细解决方案

求一条sql一行变多行,该如何解决

热度:95   发布时间:2016-04-27 14:37:52.0
求一条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.包裹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
------解决方案--------------------
探讨

引用:

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.包裹号,……

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

有没人帮我解决??
  相关解决方案