id 项目 数量 代用
----------- ---------- ----------- ----------
1 A 2 NULL
2 B 1 NULL
3 C 1 B
4 D 1 B
5 E 2 C
6 F 1 A 有上面的一个表,代用列代表是相同的东西,如第5列的E可以用C代替。怎样可以通过查询得到B(或者C)的总数和可以借用的项目。如查询C可以得出可以代用的是B、D、E,总数有5。
----------- ---------- ----------- ----------
1 A 2 NULL
2 B 1 NULL
3 C 1 B
4 D 1 B
5 E 2 C
6 F 1 A 有上面的一个表,代用列代表是相同的东西,如第5列的E可以用C代替。怎样可以通过查询得到B(或者C)的总数和可以借用的项目。如查询C可以得出可以代用的是B、D、E,总数有5。
项目=stuff((select 项目+',' from tb where 项目=a.项目 or 代用=a.项目 for xml path('')),1,1,'')
from tb a
go
--> -->
if not object_id(N'mj') is null
drop table mj
Go
Create table mj([id] int,[图号] nvarchar(1),[数量] int,[可借用图号] nvarchar(1))
Insert mj
select 1,N'A',2,null union all
select 2,N'B',1,null union all
select 3,N'C',1,N'B' union all
select 4,N'D',1,N'B' union all
select 5,N'E',2,N'C' union all
select 6,N'F',1,N'A'
Go
SELECT
[id],[图号],b.[数量]
FROM mj AS x
CROSS APPLY
(
SELECT SUM([数量]) AS [数量]
FROM mj AS a
WHERE EXISTS(SELECT 1 FROM mj WHERE [图号]=x.[图号] AND a.[可借用图号] IN([可借用图号],[图号]))
)
AS b
/*
id 图号 数量
1 A 1
2 B 2
3 C 4
4 D 2
5 E 2
6 F 1
*/