如何更新这个数据?

lenovore 2012-12-19 08:18:37
数据如下:
列1 列2 数量
A B1 0
A B2 0
A B3 1

B1 C1 1
B1 C2 1

B2 D1 0
B2 D2 1

D1 E1 1
...

简单来说就是A需要B1,B2,B3三个来组成,B1需要C1,C2组成,B2需要D1,D2组成,D1需要E1组成,当然下面还有很多这样的组成;从上面可以看出,列2数据不在列1中的数量这一列的数据均为1。
根据其组成规律,更新出对应的总量,即最终结果如下:
列1 列2 数量
A B1 2(B1由C1、C2组成,数量为C1、C2两个数量相加)
A B2 2(B2由D1、D2组成,数量为D1、D2两个数量相加)
A B3 1

B1 C1 1
B1 C2 1

B2 D1 1(D1由E1组成,直接获取其数量)
B2 D2 1

D1 E1 1
...
无论是存储过程还是其他的方法只要能实现就行。

...全文
95 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vidor 2012-12-19
  • 打赏
  • 举报
回复
-- data
if object_id('tempdb.dbo.#') is not null drop table #
create table #(c1 varchar(8), c2 varchar(8), qty int)
insert into #
select 'A', 'B1', 0 union all
select 'A', 'B2', 0 union all
select 'A', 'B3', 1 union all
select 'B1', 'C1', 1 union all
select 'B1', 'C2', 1 union all
select 'B2', 'D1', 0 union all
select 'B2', 'D2', 1 union all
select 'D1', 'E1', 1

-- result
;with cte as
(
	select x=c1, y=c2, * from #
	union all
	select x, y, b.* from cte a join # b on a.c2=b.c1
)
select c1=x, c2=y, qty=sum(qty) from cte group by x, y

/*
c1       c2       qty
-------- -------- -----------
A        B1       2
A        B2       2
A        B3       1
B1       C1       1
B1       C2       1
B2       D1       1
B2       D2       1
D1       E1       1
*/

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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