table: ProductDetailid P    Q    total
-------------------
1  P1   Q1   10
2  P1   Q1   100
1  P1   Q2   30
2  P2   Q3   40
...........检索要求如下:选出{Pn,Qm,total}
{Pn,Qm}作为匹配条件,把所有相同的挑选出来,最后的total相加
上表的检索结果如下:
P1 Q1 110
P1 Q2 30
P2 Q3 40

解决方案 »

  1.   

    select p , q , sum(total) total from ProductDetail group by p , q
      

  2.   

    select p,q,sum(total) from tb group by p,q
      

  3.   

    create table ProductDetail(id int,P varchar(10),Q varchar(10),total int)
    insert into ProductDetail values(1 ,'P1', 'Q1', 10)
    insert into ProductDetail values(2 ,'P1', 'Q1', 100)
    insert into ProductDetail values(1 ,'P1', 'Q2', 30)
    insert into ProductDetail values(2 ,'P2', 'Q3', 40)
    go
    select p , q , sum(total) total from ProductDetail group by p , q
    drop table ProductDetail/*
    p          q          total       
    ---------- ---------- ----------- 
    P1         Q1         110
    P1         Q2         30
    P2         Q3         40(所影响的行数为 3 行)
    */
      

  4.   

    select P,Q,sum(total) as total 
    from [ProductDetail]
    group by P,Q
      

  5.   


    select p,q,sum(total) total
    from tb 
    group by p,q
      

  6.   

    if object_id('[ProductDetail]') is not null drop table [ProductDetail]
    go
    create table [ProductDetail]([id] int,[P] varchar(2),[Q] varchar(2),[total] int)
    insert [ProductDetail]
    select 1,'P1','Q1',10 union all
    select 2,'P1','Q1',100 union all
    select 1,'P1','Q2',30 union all
    select 2,'P2','Q3',40select p,q,sum(total) as total from ProductDetail group by p,q
    /**
    p    q    total
    ---- ---- -----------
    P1   Q1   110
    P1   Q2   30
    P2   Q3   40(3 行受影响)
    **/
      

  7.   

    呵呵,这么多高手啊。明白了。
    现在还有另外一个复杂的。另外有两个table
    table1:
    product    Family
    ------------------
    P1         F1
    P2         F1
    P3         F2
    ...........
    Table2:
    FamilyNmae othercomuns
    F1         ...
    F2         ...
    F3         ...
    F4         ...很明显,有了P的值可以通过Table1 取得F的第一列值。
    现在要生成一个新的结果,
    {F,Total}
    这里的Total就是第一个table里面的的相加合
    例如,p1,p2 是属于同一个Family则累计相加,而这次不管Q的值了
    总结如下:
    三个table, 一个有数值,第一个其实是一个索引表,第三个是我要的统计的那些分类family的。
    检索结果是每一个Family 的 record,统计出数值(例如数量),这个数量在第一个Table中。检索的想法也很简单:
    拿出一个Family record第一列,F值,
    查看Table1里面有没有P值,如果没有则合=0,另外取一个record,
    再查Table1,如果有,则去ProductDetail里面取数据,累计起来。用C++,C#再简单不过了,但用SQL SERVER 的 SQL 两眼一抹黑了
      

  8.   

    table: ProductDetailid P Q total
    -------------------
    1 P1 Q1 10
    2 P1 Q1 100
    1 P1 Q2 30
    2 P2 Q3 40
    3 p2 qx 12
    1 P3 Q3 9ProductTable:
    P1 F1
    P2 F1
    P3 F1
    P2 F2
    P3 F3FamilyTable:
    F1
    F2
    F3
    F4
    F5
    F6result expected:
    F1 10+100+30 = 140
    F2 40+12 = 52
    F3 9
    F4 0
    F5 0
    F6 0
      

  9.   

    真实的数据贴了,那晚高手帮忙看看?
    表1:
    table: ProductDetail
    id P Q total
    -------------------
    1 P1 Q1 10
    2 P1 Q1 100
    1 P1 Q2 30
    2 P2 Q3 40
    3 p2 qx 12
    1 P3 Q3 9
    表2:
    ProductTable:
    P1 F1
    P2 F1
    P3 F1
    P2 F2
    P3 F3
    表3:
    FamilyTable:
    F1
    F2
    F3
    F4
    F5
    F6需要的结果如下:
    F1 10+100+30 = 140
    F2 40+12 = 52
    F3 9
    F4 0
    F5 0
    F6 0
      

  10.   

    试试
    select F,sum(isnull(t1.total,0))
    from FamilyTable t3 left join ProductTable t2 on t3.F=t2.F
    left join ProductDetail t1 on t2.P=t1.P
    group by t3.F
      

  11.   

    table: ProductDetailid P Q total
    -------------------
    1 P1 Q1 10
    2 P1 Q1 100
    1 P1 Q2 30
    2 P2 Q3 40
    ...........检索要求如下:选出{Pn,Qm,total}
    {Pn,Qm}作为匹配条件,把所有相同的挑选出来,最后的total相加
    上表的检索结果如下:
    P1 Q1 110
    P1 Q2 30
    P2 Q3 40
    从这个例子我学习到
    GRROUP BY的用法他使得聚集函数在group by 后面使用的
      

  12.   

    十分感谢。就是这样做的。我的实际代码如下。
    对了,怎么发帖子,成您那样的格式?我只会发text 格式。use [SIEINV0613] 
    select d.FamilyName, sum(isnull("t"."SubTotal",0)) 
    from "DriveFamilies" "d"
    left join "model" "m" on "d"."FmID" = "m"."FmId"
    left join "PartNumber" "p" on "p"."MdID" = "m"."MdID" 
    left join "TransactionPODetail" t on "t"."PartNumber" = "p"."PartNumber"
    group by "d".FamilyName 
      

  13.   

    结果如下:高兴,正是我想要的
    FamilyName FamilySubTotal
    AirWalker 0
    Brinks 13
    Cameron 12
    Compass 2
    DESARU 0
    EagleRP  20
    Firestorm  64
    Holiday 0
    LightningBug 0
    MantaRay 0
    Moose 0
    Pulsar 0
    Sapta 0
    Seletar 0
    Wyatt 0
    YellowJacket 0