普通网友 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条)

报告相同问题?