A表
ItemID  ID1,  ID2, ID3, ID4, F1,F2,F3
A001     kg     kg    m      kgB表
ItemID   From   To     Factor
A001      kg         kg    1
A001      m          kg     2现在想求得是,a表的ID1->ID4,  ID2->ID4, ID3->ID4 之间的转换结果就是
ItemID  ID1,  ID2, ID3, ID4, F1,F2,F3
A001     kg     kg    m      kg   1   1    2

解决方案 »

  1.   

    Declare @TmpDataA Table(
    ItemID NVarchar(100),
    ID1 Nvarchar(5),
    ID2 Nvarchar(5),
    ID3 Nvarchar(5),
    ID4 Nvarchar(5))Insert Into @TmpDataA
    Select 'A001','kg','kg','m','kg'Declare @TmpDataB Table(
    ItemID NVarchar(100),
    FromS Nvarchar(5),
    ToS NVarchar(5),
    Factor Int)
    Insert Into @TmpDataB
    Select 'A001','kg','kg',1
    Union
    Select 'A001','m','kg',2Select A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4,Sum(F1) As F1,Sum(F2) As F2,Sum(F3) AsF3 From (
    Select A.*,B.Factor As F1,0 As F2,0 As F3
    From @TmpDataA A
    Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID1 And B.ToS = A.ID4
    Union All
    Select A.*,0 As F1,B.Factor As F2,0 As F3
    From @TmpDataA A
    Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID2 And B.ToS = A.ID4
    Union All
    Select A.*,0 As F1,0 As F2,B.Factor As F3
    From @TmpDataA A
    Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID3 And B.ToS = A.ID4) A
    Group By A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
      

  2.   

    --查询方式
    SELECT A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
    ,T1.Factor F1,T2.Factor F2,T3.Factor F3
    FROM A
    LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
    LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
    LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]--更新方式
    UPDATE A
    SET F1=T1.Factor,F2=T2.Factor,F3=T3.Factor
    FROM A
    LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
    LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
    LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]
      

  3.   

    --查询方式
    SELECT A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
        ,T1.Factor F1,T2.Factor F2,T3.Factor F3
    FROM A
        LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
        LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
        LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]
    这种方式的话,对B表是检索一次还是多次呢, 如果B表数据量很大,就会很慢吧