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.   

    select *,数量=(select sum(数量) from tb where 项目=a.项目 or 代用=a.项目)
           项目=stuff((select 项目+',' from tb where 项目=a.项目 or 代用=a.项目 for xml path('')),1,1,'')
    from tb a
      

  2.   

    use Tempdb
    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
    */