现在使用SQL组合查询结果如下
----------------------------------------------
部门ID   费用A   费用B   费用C   费用D   费用E
1         0       1.2    2.4     2.5     0
2         10      20      30      0      0
3         2        5      0       5      0
4         0.2      0      2.4     2      5.5
。。
。。
-----------------------------------------------
客户的要求的结果是这样
----------------------------------------------
部门ID   费用A   费用B   费用C   其他费用
1         0       1.2    2.4     2.5
2         10      20      30      0
3         2        5      0       5
其他部门  x        x      x       x
--------------------------------------------------
就是说在第一查询结果中只显示部分费用列和部分部门行,不显示的费用合计到其他费用,不显示的部门按列合计到其他部门中不知道SQL如何来做出来?请教大家

解决方案 »

  1.   

    select ltrim(id) as id ,...
    from ta  where id < 4
    union all
    select '其他部门' as id ,sum().....
    from ta where id >3
      

  2.   

    SELECT 部门ID,费用A,费用B,费用C,费用D+费用E AS 其他费用 
    FROM TB
    WHERE 部门ID IN(1,2,3,4)
    UNION ALL
    SELECT '其他部门',SUM(费用A),SUM(费用B),SUM(费用C),SUM(费用D+费用E) 
    FROM TB
    WHERE 部门ID NOT IN(1,2,3,4)
      

  3.   

    楼上大大,不是真的按ID排例显示的,可以说是从费用名任意挑选N个费用,然后从部门中任意挑选N个部门其他没选上的费用和部门都归在其他合计中具体第一个查询结果,我的SQL如下 declare @s varchar(8000)
    set @s=  'Select [Depart_ID] 部门ID, [Depart_Name] 部门名称'
    select @s=@s+ ','+'IsNull(['+XMMC_Name+'], 0) ['+XMMC_Name+']'
    From [Sol_XMMC] order By [XMMC_ID] asc
    set @s=@s+  ' From [Sol_Depart] A Left join ( '
    set @s=@s+  ' Select B.[SHDW_ID]' select @s=@s+  ','+'['+XMMC_Name+']=(sum(case when Wt_XMMC = '''+ltrim([XMMC_Name])+''' then [Wts_Money] else 0 end))'
    From [Sol_XMMC] order By [XMMC_ID] asc
    set @s=@s+  ' From Sol_Wt A left join Sol_Wts B on A.Wt_ID = B.Wt_ID Where A.[Wt_IsZF]=0 and [Wt_IsXZ] = 1 group by B.[SHDW_ID] '
    set @s=@s+  ')B on A.[Depart_ID]=B.[SHDW_ID] Where A.[Depart_IsOut] = 0 Order By [Depart_OrderID] asc'
    exec(@s)
      

  4.   

    费用名称是通过行例转化取得的有人能帮我把这个SQL完善一下吗?