也可以吧
Select 
ID,
SUM(Case v2 When 0 Then val Else 0 End) As val1,
SUM(Case v2 When 1 Then val Else 0 End) As val2,
SUM(val) As total
from
(select a.ID as ID,a.val as val,b.v2 as v2 from table2 a,table1 b where a.v1=b.v1)t
Group By ID
Order By ID

解决方案 »

  1.   

    --建立测试环境
    Create Table TEST1(v2 Int,v1 Varchar(10))
    Create Table TEST2(ID Varchar(10),val Int,v1 Varchar(10))
    --插入数据
    Insert TEST1 Values(0,      'a')
    Insert TEST1 Values(0,      'b')
    Insert TEST1 Values(0,      'c')
    Insert TEST1 Values(1,      'd')
    Insert TEST1 Values(1,      'e')Insert TEST2 Values('a',      1,      'a')
    Insert TEST2 Values('b',      5,      'b')
    Insert TEST2 Values('c',      6,      'c')
    Insert TEST2 Values('a',      4,      'd')
    Insert TEST2 Values('b',      2,      'e')
    --测试
    Select 
    B.ID,
    SUM(Case A.v2 When 0 Then B.val Else 0 End) As val1,
    SUM(Case A.v2 When 1 Then B.val Else 0 End) As val2,
    SUM(val) As total
    from TEST2 B
    Inner Join TEST1 A
    On A.v1=B.v1
    Group By B.ID
    Order By B.ID
    --删除测试环境
    Drop Table TEST1,TEST2
    --结果
    /*
    ID val1 val2 total
    a 1 4 5
    b 5 2 7
    c 6 0 6
    */
      

  2.   

    用Inner Join的效率比子查询的效率要高。
      

  3.   

    SQL 语句如此强大,是否可以这么说: 任意的表格都可以通过SQL语句 查询出来??
      

  4.   

    SQL 语句如此强大,是否可以这么说: 任意的表格都可以通过SQL语句 查询出来??任意有规则的、通过有限步骤可以得到的表格都可以通过SQL语句查询出来。