普通网友 2011-05-30 16:25
浏览 319
已采纳

一个SQL 分组统计的SQL语句,困住了,看看怎么实现

原始表数据结构

名称 数量 单价 总金额
根1 500 500 250000
子1 100 500 50000
子2 100 500 50000
子3 100 500 50000
子4 100 500 50000
子5 100 500 50000
根2 300 50 15000
根2_子1 100 50 5000
根2_子2 100 50 5000
根2_子3 100 50 5000
根3 0 0 0

查询后得到以下结果:

名称 数量 单价 总金额
根1 500 500 250000
子1 100 500 50000
子2 100 500 50000
子3 100 500 50000
子4 100 500 50000
[b]合计 500 2500 250000[/b]
根2 300 50 15000
根2_子1 100 50 5000
根2_子2 100 50 5000
根2_子3 100 50 5000
[b]合计 300 150 15000[/b]
根3 0 0 0

这里主要是,根和子是父子关系,表里面有个 PID ,统计时只要统计子的[b]合计[/b]

  • 写回答

4条回答 默认 最新

  • iteye_8576 2011-05-31 20:32
    关注

    你这个属于层次查询了,如果父子关系就是两层的话,可以这么写
    [code="sql"]SELECT m.*
    FROM (SELECT 'x' id,
    '合计' text,
    t1.pid,
    SUM(t1.size) size,
    SUM(t1.price) price,
    SUM(t1.totalPrice) totalPrice
    FROM hudc.dbo.test2 t1
    WHERE t1.pid > 0
    GROUP BY t1.pid
    UNION ALL
    SELECT CAST(t2.id AS VARCHAR),
    t2.text,
    t2.pid,
    t2.size,
    t2.price,
    t2.totalPrice
    FROM hudc.dbo.test2 t2) m
    ORDER BY CASE
    WHEN CAST(m.pid AS VARCHAR) = '0' THEN
    CAST(m.id AS VARCHAR)
    ELSE
    CAST(m.pid AS VARCHAR) + '_' + CAST(m.id AS VARCHAR)
    END[/code]
    如果层数不固定的话,在sql 2000下不好实现,sql 2005提供了层次查询函数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程