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 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
解决方案 »
- 执行存储过程提示如下错误
- 数据库更新语句和分组查询语句问题!
- 更新关联单据明细表中的pro_pamount中的值。
- 一个简单的触发器的写法 在线等
- SQL SERVER 内存飙升
- 2005dts包
- 在sql server 2000的存储过程里面如何获知一行记录是否与其他表存在外键关联
- 数据库的移植问题?
- 我在一个SQL Server的自定义函数中调用一个自定义的存储过程,执行此函数后发出如下提示:“只有函数和扩展存储过程才能从函数内部执行。
- 请高手指路:能不能做这样一个程序,一次性录入数据,使两个软件的数据库同时增加所录数据!高分求教!
- sqlsever如何知道有程序连接到数据库?
- 请教高手SQL
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 行)
*/
from [ProductDetail]
group by P,Q
select p,q,sum(total) total
from tb
group by p,q
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 行受影响)
**/
现在还有另外一个复杂的。另外有两个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 两眼一抹黑了
-------------------
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
表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
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
-------------------
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 后面使用的
对了,怎么发帖子,成您那样的格式?我只会发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
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