首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-03-14 
求一条sql一行变多行包裹表x_tm_package包裹id包裹号001 12562002 44444包裹明细表x_tm_package_detail包

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

[解决办法]
探讨

有没人帮我解决??

热点排行