仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 777|回复: 8
打印 上一主题 下一主题

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

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:29 | 只看该作者
多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-27 21:17:42 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
小魔女 该用户已被删除
地板
发表于 2015-2-5 11:34:27 | 只看该作者
微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。
若天明 该用户已被删除
5#
发表于 2015-2-11 13:20:42 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
若相依 该用户已被删除
6#
发表于 2015-3-2 13:16:18 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-11 03:59:54 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
兰色精灵 该用户已被删除
8#
发表于 2015-3-17 20:10:30 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
山那边是海 该用户已被删除
9#
发表于 2015-3-24 23:42:45 | 只看该作者
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 06:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表