none
sql查询的问题 RRS feed

  • 问题

  • select Top 10 用车部门名称 as 用车部门,项目编号,结算金额 
    from V_CLGL_用车信息
    where 用车部门='12' and 安排发车时间 between '2009-08-01' and '2009/8/31 23:59:59'  and 状态=6
    order by 项目编号

    通过上面的语句查出来的结果集如下:

       部门     编号      金额
    高压所 F08HV31 768.00
    高压所 F09HV07 672.00
    高压所 F09HV10 96.00
    高压所 F09HV10 1392.00
    高压所 F09HV10 1280.00
    高压所 F09HV10 959.00
    高压所 F09HV12 3421.60
    高压所 J09HV24 480.00
    高压所 高压所管理 846.30
    高压所 高压所管理 1760.00

    怎么通过这个结果集,写一下sql语句,让结果集变成下面这样:
       部门     编号      金额
    高压所 F08HV31 768.00
                   汇总  768.00
    高压所 F09HV07 672.00
                   汇总  672.00
    高压所 F09HV10 96.00
    高压所 F09HV10 1392.00
    高压所 F09HV10 1280.00
    高压所 F09HV10 959.00
                   汇总  3727.00
    高压所 F09HV12 3421.60
                   汇总  3421.60
    高压所 J09HV24 480.00
                   汇总  480.00
    高压所 高压所管理 846.30
    高压所 高压所管理 1760.00
                   汇总  2606.30
                   总计  11674.9
    • 已移动 孟宪会 2009年10月29日 13:35 (发件人:ASP.NET 与 AJAX)
    2009年10月29日 6:49

答案

  •  SELECT CASE WHEN ID = 2 THEN '' ELSE 用车部门 END AS 用车部门,
      CASE WHEN ID = 2 THEN 项目编号 + '汇总' ELSE 项目编号 END AS 项目编号, 结算金额 FROM
     (
      SELECT ID, 用车部门 + '$' + 项目编号 AS 用车部门项目编号组合, 用车部门, 项目编号, 结算金额 FROM
      (
       SELECT 1 AS ID, * FROM
       ('
       +@查询+
       ') T
       UNION ALL
       SELECT 2 AS ID, 用车部门, 项目编号, SUM(结算金额) AS 结算金额 FROM
       ('
       +@查询+
       ') T GROUP BY 用车部门, 项目编号
      ) T
     ) T ORDER BY 用车部门项目编号组合, ID'
    • 已标记为答案 m s 2009年11月3日 1:14
    2009年11月3日 1:13

全部回复

  • 你好!

    SQL 2005 提供了新的语法可以方便的达到你的效果。下面是以前写的例子,你参考一下。

    DECLARE @Inventory TABLE (Item VARCHAR(50), Color VARCHAR(50), Quantity INT)
    
    INSERT INTO @Inventory
    
    SELECT 'Table', 'Blue', 124  UNION ALL
    SELECT 'Table', 'Red',  223  UNION ALL
    SELECT 'Chair', 'Blue', 101  UNION ALL
    SELECT 'Chair', 'Red',  210      
    
    SELECT * FROM @Inventory 
    
    SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'
                ELSE ISNULL(Item, 'UNKNOWN')
           END AS Item,
           CASE WHEN (GROUPING(Color) = 1) THEN 'ALL'
                ELSE ISNULL(Color, 'UNKNOWN')
           END AS Color,
           SUM(Quantity) AS QtySum
    FROM @Inventory
    GROUP BY Item, Color WITH ROLLUP


    知识改变命运,奋斗成就人生!
    2009年10月29日 6:55
  •  SELECT CASE WHEN ID = 2 THEN '' ELSE 用车部门 END AS 用车部门,
      CASE WHEN ID = 2 THEN 项目编号 + '汇总' ELSE 项目编号 END AS 项目编号, 结算金额 FROM
     (
      SELECT ID, 用车部门 + '$' + 项目编号 AS 用车部门项目编号组合, 用车部门, 项目编号, 结算金额 FROM
      (
       SELECT 1 AS ID, * FROM
       ('
       +@查询+
       ') T
       UNION ALL
       SELECT 2 AS ID, 用车部门, 项目编号, SUM(结算金额) AS 结算金额 FROM
       ('
       +@查询+
       ') T GROUP BY 用车部门, 项目编号
      ) T
     ) T ORDER BY 用车部门项目编号组合, ID'
    • 已标记为答案 m s 2009年11月3日 1:14
    2009年11月3日 1:13