如何将一条记录拆分关联

zhujiawei7 2014-05-26 09:56:08
销售明细表
ID 单据号 商品 销售数量
------------------------------------------------------
1 10001 商品A 10
2 10001 商品B 20
3 10002 商品A 30

票据兑换表
ID 单据号 票据类型 兑换票据数量
------------------------------------------------------
1 10001 票据A 6
2 10002 票据A 3

什么票据能换什么商品,兑换比例是多少,这保存在另一张表。这里将问题简化,视为一张票据A 能换5件商品A或B(1:5)。
单据10001,用6张票据A兑换了10件商品A和20件商品B。
单据10002,用3张票据A兑换了15件商品A,另外15件采用其他支付方式。
客户查询销售明细想要的结果如下,将兑换数量6拆成了2和4。不知道该如何实现?

单据号 商品 销售数量 兑换票据数量
------------------------------------------------------
10001 商品A 10 2
10001 商品B 20 4
10002 商品A 10 3








...全文
157 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujiawei7 2014-05-26
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
感觉你的表缺少是否全额兑换的标志位,没有这个标志位就需要去算总和,加大了sql复杂程度。 思路是这样的,如果1:5为一定值,那么先按单据号计算销售明细表总和,并与票据兑换表的兑换票据数量 * 5比较,算出是否全额抵扣,然后把结果作为子查询与销售明细表关联,用case 抵扣状态来判断到底是销售明细表 / 5,还是用票据兑换表 * 5作为最终结果的销售数量
你说的对。但是还有个更复杂的问题,多种票据类型能兑换很多种商品,而且每种兑换比率不同。如果一张单据有多种商品,然后又用多种不同的票据去兑换。就很难去判断到底是什么票在兑换什么商品了。
xdashewan 2014-05-26
  • 打赏
  • 举报
回复
感觉你的表缺少是否全额兑换的标志位,没有这个标志位就需要去算总和,加大了sql复杂程度。 思路是这样的,如果1:5为一定值,那么先按单据号计算销售明细表总和,并与票据兑换表的兑换票据数量 * 5比较,算出是否全额抵扣,然后把结果作为子查询与销售明细表关联,用case 抵扣状态来判断到底是销售明细表 / 5,还是用票据兑换表 * 5作为最终结果的销售数量

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧