老尸 发表于 2015-1-16 22:36:27

MYSQL网页编程之完成按部门月卡余额总额分组统计的SQL查...

MySQL的低成本来自于其简单性吗?它的普及性是由于其低成本吗?其实,在MySQL的最“好”与最“不好”的功能之间没有明显的分界线,但它们组合在一起就形成了一副让我们欣赏的作品。分组|统计陈优章的专栏
(原创,到如今为至最为庞大的SQL查询代码)完成按部门月卡余额总额分组统计的SQL查询代码(在MsSQLServer中调试经由过程)
SELECTdp.dpname1AS部门,cust_dp_SumOddfre.sum_oddfareAS当月卡总余额
FROM(SELECTT_Department.DpCode1,SUM(custid_SumOddfare_group.sum_oddfare)
ASsum_oddfare
FROM(SELECTl2.CustomerID,SUM(r1.oddfare)ASsum_oddfare
FROM(SELECTCustomerID,MAX(OpCount)ASmax_opcount
FROM(SELECTCustomerID,OpCount,RTRIM(CAST(YEAR(OpDt)
ASchar))+-+RTRIM(CAST(MONTH(OpDt)ASchar))
+-+RTRIM(DAY(0))ASdt
FROMT_ConsumeRec
UNION
SELECTCustomerID,OpCount,RTRIM(CAST(YEAR(cashDt)
ASchar))+-+RTRIM(CAST(MONTH(cashDt)ASchar))
+-+RTRIM(DAY(0))ASdt
FROMT_Cashrec)l1
WHERE(dt<=2005-6-1)/*输出查询月份,可用参数传送*/
GROUPBYCustomerID)l2INNERJOIN
(SELECTCustomerID,OpCount,oddfare
FROMT_ConsumeRec
UNION
SELECTCustomerID,OpCount,oddfare
FROMT_Cashrec)r1ONl2.CustomerID=r1.CustomerIDAND
r1.OpCount=l2.max_opcount
GROUPBYl2.CustomerID)custid_SumOddfare_groupINNERJOIN
T_CustomersON
custid_SumOddfare_group.CustomerID=T_Customers.CustomerIDINNERJOIN
T_DepartmentONSUBSTRING(T_Customers.Account,1,2)
=T_Department.DpCode1ANDSUBSTRING(T_Customers.Account,3,2)
=T_Department.DpCode2ANDSUBSTRING(T_Customers.Account,5,3)
=T_Department.DpCode3
GROUPBYDpCode1)cust_dp_SumOddfreINNERJOIN
(SELECTDISTINCTdpcode1,dpname1
FROMt_department)dpONdp.dpcode1=cust_dp_SumOddfre.DpCode1
附:查询用到的基础表构成剧本:
CREATETABLE.(--出纳明细帐本
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,--存存款工夫
NOTNULL,
NOTNULL,
NOTNULL,--某卡的操纵次数,只累加
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,--此次操纵后该卡的余额
NOTNULL,
NOTNULL,
NULL,
NULL,
NULL
)ON
GO
CREATETABLE.(--消耗明细帐本
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,--某卡的操纵次数,只累加
NOTNULL,--消耗工夫
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,--此次操纵后该卡的余额
NOTNULL,
NOTNULL,
NOTNULL,
NULL,
NULL,
NULL,
NULL,
NOTNULL,
NULL
)ON
GO
CREATETABLE.(--客户帐本
NOTNULL,--客户号,主键
(3)COLLATEChinese_PRC_CI_ASNOTNULL,
(7)COLLATEChinese_PRC_CI_ASNOTNULL,--单元代号
(12)COLLATEChinese_PRC_CI_ASNOTNULL,
NOTNULL,
NULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
NOTNULL,
(1)COLLATEChinese_PRC_CI_ASNOTNULL,
(10)COLLATEChinese_PRC_CI_ASNULL,
(20)COLLATEChinese_PRC_CI_ASNULL,
NOTNULL,
(4)COLLATEChinese_PRC_CI_ASNULL,
NULL,
NULL,
(19)COLLATEChinese_PRC_CI_ASNULL,
NULL,
NULL,
(20)COLLATEChinese_PRC_CI_ASNULL,
(2)COLLATEChinese_PRC_CI_ASNULL,
(100)COLLATEChinese_PRC_CI_ASNULL,
(10)COLLATEChinese_PRC_CI_ASNULL,
NULL,
NULL,
NOTNULL,
NOTNULL
)ON
GO
CREATETABLE.(--单元账本,三级单元制,树型布局
(2)COLLATEChinese_PRC_CI_ASNOTNULL,
(2)COLLATEChinese_PRC_CI_ASNULL,
(3)COLLATEChinese_PRC_CI_ASNULL,
(30)COLLATEChinese_PRC_CI_ASNULL,
(30)COLLATEChinese_PRC_CI_ASNULL,
(30)COLLATEChinese_PRC_CI_ASNULL,
NOTNULL,
NULL
)ON
GO
有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。

蒙在股里 发表于 2015-1-19 18:16:29

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

愤怒的大鸟 发表于 2015-1-27 21:17:42

可以动态传入参数,省却了动态SQL的拼写。

小魔女 发表于 2015-2-5 11:34:27

微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。

若天明 发表于 2015-2-11 13:20:42

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

若相依 发表于 2015-3-2 13:16:18

一个是把SQL语句写到客户端,可以使用DataSet进行加工;

飘飘悠悠 发表于 2015-3-11 03:59:54

groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。

兰色精灵 发表于 2015-3-17 20:10:30

SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。

山那边是海 发表于 2015-3-24 23:42:45

对于微软系列的东西除了一遍遍尝试还真没有太好的办法
页: [1]
查看完整版本: MYSQL网页编程之完成按部门月卡余额总额分组统计的SQL查...