SQL 如果实现数值占有分配

Account007 2018-08-22 02:45:23


如图示,怎么可以实现根据A表数数,B表数据,两个表通过关联字段判断关联,想要实现的是,A表的数据怎么分配占有B表的数量
...全文
259 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2018-08-24
  • 打赏
  • 举报
回复
WITH
tb1 AS(
SELECT * FROM(VALUES
(1, 'A', 2000),
--(2, 'A', 200),
--(3, 'A', 200),
--(4, 'A', 1000),
--(5, 'A', 2000),
(6, 'A', 2000)
) D(id, name, value )
),
tb2 AS(
SELECT * FROM(VALUES
(1, 'A', 'A1', 1000),
(2, 'A', 'A2', 2000),
(3, 'A', 'A3', 3000)
) D(id, a_name, name, value )
),
A AS(
SELECT *, s_value1 = s_value2-value FROM(
SELECT *, s_value2 = SUM(value)OVER(PARTITION BY name ORDER BY id)
FROM tb1
)D
),
B AS(
SELECT *, s_value1 = s_value2-value FROM(
SELECT *, s_value2 = SUM(value)OVER(PARTITION BY a_name ORDER BY id)
FROM tb2
)D
)
SELECT B.id, B.a_name, B.name, B.value,
A.id, A.value,
占用 = CASE
WHEN A.s_value1 >= B.s_value1 AND A.s_value2 <= B.s_value2 THEN A.value
WHEN B.s_value1 >= A.s_value1 AND B.s_value2 <= A.s_value2 THEN B.value
WHEN A.s_value2 > B.s_value2 THEN A.value - (A.s_value2-B.s_value2)
ELSE A.s_value2 - B.s_value1
END
FROM B, A
WHERE B.a_name = A.name
AND B.s_value1 < A.s_value2 AND B.s_value2 >= A.s_value1
Account007 2018-08-22
  • 打赏
  • 举报
回复
如A表大于了B表的数,默认是取B表的数量,目的就是把B表的数占有,如果B表数量有余,只截取满足A的数量就可以了
二月十六 2018-08-22
  • 打赏
  • 举报
回复
分配规则是什么?够分配或者不够分配怎么办,分配剩余的怎么办,分配优先顺序是什么……

27,579

社区成员

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

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