仓酷云

标题: MYSQL网页编程之完成按部门月卡余额总额分组统计的SQL查... [打印本页]

作者: 老尸    时间: 2015-1-16 22:36
标题: 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[dbo].[T_CashRec](--出纳明细帐本
[StatID][tinyint]NOTNULL,
[CashID][smallint]NOTNULL,
[Port][tinyint]NOTNULL,
[Term][tinyint]NOTNULL,
[CashDt][datetime]NOTNULL,--存存款工夫
[CollectDt][datetime]NOTNULL,
[CustomerID][int]NOTNULL,
[OpCount][int]NOTNULL,--某卡的操纵次数,只累加
[InFare][money]NOTNULL,
[OutFare][money]NOTNULL,
[SumFare][money]NOTNULL,
[OddFare][money]NOTNULL,--此次操纵后该卡的余额
[MngFare][money]NOTNULL,
[Hz][tinyint]NOTNULL,
[CurSum][smallmoney]NULL,
[CurCount][smallint]NULL,
[CardSN][tinyint]NULL
)ON[PRIMARY]
GO
CREATETABLE[dbo].[T_ConsumeRec](--消耗明细帐本
[StatID][tinyint]NOTNULL,
[Port][tinyint]NOTNULL,
[Term][tinyint]NOTNULL,
[CustomerID][int]NOTNULL,
[OpCount][int]NOTNULL,--某卡的操纵次数,只累加
[OpDt][datetime]NOTNULL,--消耗工夫
[CollectDt][datetime]NOTNULL,
[MealID][tinyint]NOTNULL,
[SumFare][smallmoney]NOTNULL,
[OddFare][smallmoney]NOTNULL,--此次操纵后该卡的余额
[MngFare][smallmoney]NOTNULL,
[OpFare][smallmoney]NOTNULL,
[Hz][tinyint]NOTNULL,
[MenuID][smallint]NULL,
[MenuNum][tinyint]NULL,
[OddFarePre][smallmoney]NULL,
[RecNo][smallint]NULL,
[CardSN][tinyint]NOTNULL,
[CardVer][tinyint]NULL
)ON[PRIMARY]
GO
CREATETABLE[dbo].[T_Customers](--客户帐本
[CustomerID][int]NOTNULL,--客户号,主键
[StatCode][varchar](3)COLLATEChinese_PRC_CI_ASNOTNULL,
[Account][varchar](7)COLLATEChinese_PRC_CI_ASNOTNULL,--单元代号
[Name][varchar](12)COLLATEChinese_PRC_CI_ASNOTNULL,
[CardNo][int]NOTNULL,
[CardSN][tinyint]NULL,
[CardType][tinyint]NOTNULL,
[Status][tinyint]NOTNULL,
[OpenDt][datetime]NOTNULL,
[CashID][smallint]NOTNULL,
[SumFare][smallmoney]NOTNULL,
[ConsumeFare][smallmoney]NOTNULL,
[OddFare][smallmoney]NOTNULL,
[OpCount][int]NOTNULL,
[CurSubsidyFare][smallmoney]NOTNULL,
[SubsidyDT][datetime]NOTNULL,
[SubsidyOut][char](1)COLLATEChinese_PRC_CI_ASNOTNULL,
[Alias][varchar](10)COLLATEChinese_PRC_CI_ASNULL,
[outid][varchar](20)COLLATEChinese_PRC_CI_ASNULL,
[UpdateID][tinyint]NOTNULL,
[Pwd][char](4)COLLATEChinese_PRC_CI_ASNULL,
[QuChargFare][smallmoney]NULL,
[HasTaken][tinyint]NULL,
[DragonCardNo][char](19)COLLATEChinese_PRC_CI_ASNULL,
[ApplyCharg][smallmoney]NULL,
[ChargPer][smallmoney]NULL,
[MingZu][varchar](20)COLLATEChinese_PRC_CI_ASNULL,
[Sex][char](2)COLLATEChinese_PRC_CI_ASNULL,
[Memo][varchar](100)COLLATEChinese_PRC_CI_ASNULL,
[WeiPeiDW][varchar](10)COLLATEChinese_PRC_CI_ASNULL,
[CardConsumeType][tinyint]NULL,
[LeaveSchoolDT][datetime]NULL,
[UseValidDT][tinyint]NOTNULL,
[NoUseDate][datetime]NOTNULL
)ON[PRIMARY]
GO
CREATETABLE[dbo].[T_Department](--单元账本,三级单元制,树型布局
[DpCode1][char](2)COLLATEChinese_PRC_CI_ASNOTNULL,
[DpCode2][char](2)COLLATEChinese_PRC_CI_ASNULL,
[DpCode3][char](3)COLLATEChinese_PRC_CI_ASNULL,
[DpName1][varchar](30)COLLATEChinese_PRC_CI_ASNULL,
[DpName2][varchar](30)COLLATEChinese_PRC_CI_ASNULL,
[DpName3][varchar](30)COLLATEChinese_PRC_CI_ASNULL,
[N_SR][int]NOTNULL,
[BatNum][smallint]NULL
)ON[PRIMARY]
GO
有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。
作者: 蒙在股里    时间: 2015-1-19 18:16
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
作者: 愤怒的大鸟    时间: 2015-1-27 21:17
可以动态传入参数,省却了动态SQL的拼写。
作者: 小魔女    时间: 2015-2-5 11:34
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
作者: 若天明    时间: 2015-2-11 13:20
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
作者: 若相依    时间: 2015-3-2 13:16
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
作者: 飘飘悠悠    时间: 2015-3-11 03:59
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
作者: 兰色精灵    时间: 2015-3-17 20:10
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
作者: 山那边是海    时间: 2015-3-24 23:42
对于微软系列的东西除了一遍遍尝试还真没有太好的办法




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2