科目表:(每子个级的科目编码都是由父级编码+ "-" + 子编码)
科目ID     科目编码       科目名称
1           1001           现金
2           1002           银行存款
3           1002-01        工商银行
4           1002-02        农业银行
.....
100          2171 应交税金
101           2171-01 应交增值税
102           2171-01-01 进项税额
103           2171-01-02 已交税金
104           2171-02 未交增值税
105           2171-03 应交营业税业务发生表(该表的科目都是末级)
科目ID  年度      月度    借方金额      贷方金额
1        2008     5      90           10
4        2008     5      20           30
102      2008     5      1            4
105      2008     5      100          200求一个Sql,能查询父级汇总子级,并且根据子级来确定显示父级
如只查科目(ID=102 OR ID=105)时,结果就为科目ID      科目编码      科目名称       借方金额     贷方金额
100         2171        应交税金       101        204
101         2171-01     应交增值税     1          4
102         2171-01-01  进项税额       1          4
105         2171-03 应交营业税     100        200如果ID=105时,则为
科目ID      科目编码      科目名称       借方金额     贷方金额
100         2171        应交税金       100        200
105         2171-03 应交营业税     100        200也就是,根据所查到的子级,再判断该子级是否有父级,若有父级,则显示父级,并且汇总该父级,但父级也只是汇总所有显示的子级.大家帮帮我吧!      

解决方案 »

  1.   

    select 
    b.科目ID,b.科目编码,b.科目名称,c.借方金额,c.贷方金额
    from 
    科目表 a 
    join 
    科目表 b on a.科目编码 like b.科目编码+'%'
    join
    业务发生表 c on c.科目ID=a.科目ID
    where
    a.ID=105
      

  2.   

    --风的方式是正确的.
    -->生成测试数据
     
    declare @科目表 table([科目ID] int,[科目编码] nvarchar(10),[科目名称] nvarchar(5))
    Insert @科目表
    select 1,N'1001',N'现金' union all
    select 2,N'1002',N'银行存款' union all
    select 3,N'1002-01',N'工商银行' union all
    select 4,N'1002-02',N'农业银行' union all
    select 100,N'2171',N'应交税金' union all
    select 101,N'2171-01',N'应交增值税' union all
    select 102,N'2171-01-01',N'进项税额' union all
    select 103,N'2171-01-02',N'已交税金' union all
    select 104,N'2171-02',N'未交增值税' union all
    select 105,N'2171-03',N'应交营业税'
    --Select * from @科目表declare @业务发生表 table([科目ID] int,[年度] Datetime,[月度] int,[借方金额] int,[贷方金额] int)
    Insert @业务发生表
    select 1,'2008',5,90,10 union all
    select 4,'2008',5,20,30 union all
    select 102,'2008',5,1,4 union all
    select 105,'2008',5,100,200
    --Select * from @业务发生表select 
        b.科目ID,b.科目编码,b.科目名称,sum(c.借方金额) as [借方金额],sum(c.贷方金额) as [贷方金额] 
    from 
         @科目表 a 
    join 
         @科目表 b on a.科目编码 like b.科目编码+'%'
    join
        @业务发生表 c on c.科目ID=a.科目ID
    where
        a.科目ID in (102,105)
    group by b.科目ID,b.科目编码,b.科目名称
    /*
    科目ID        科目编码       科目名称  借方金额        贷方金额
    ----------- ---------- ----- ----------- -----------
    100         2171       应交税金  101         204
    101         2171-01    应交增值税 1           4
    102         2171-01-01 进项税额  1           4
    105         2171-03    应交营业税 100         200
    */
    /*
    科目ID        科目编码       科目名称  借方金额        贷方金额
    ----------- ---------- ----- ----------- -----------
    100         2171       应交税金  100         200
    105         2171-03    应交营业税 100         200
    */