请高手帮忙写一段SQL?

王朝知道·作者佚名  2009-12-17
窄屏简体版  字體: |||超大  
 
分類: 電腦/網絡 >> 程序設計 >> 其他編程語言
 
問題描述:

我想在一个表中统计某个人的未缴费纪录改怎么写?

比如,在表 JF 中已有的纪录:

nbcode name time money

0001 甲 200601 100

0001 甲 200602 100

0001 甲 200603 100

0001 甲 200604 100

0001 甲 200607 100

0001 甲 200608 100

0001 甲 200609 100

0001 甲 200610 100

0001 甲 200612 100

从这个表中统计出来的应该是显示 甲未交的月份

nbcode name time

0001 甲 200605

0001 甲 200606

0001 甲 200611

不知道能不能这样筛选?不能的话能给介绍个好的方法吗?

參考答案:

从关系数据库的理论来说,你的这个要求是要求一个关系的补,

而这从经典理论的角度来说,是不可实现的,也就是说在关系

数据库上,是不可实现的。

因此你的需求应转换为从一个已存在的关系中减去一个子关系。

这个问题的解可以用下面的思路来解:

建立一个表T,只有一个字段TIME,预先存入下述数据

200601

200602

200603

...

200612

于是查询未缴费月份的SQL语句如下:

下面的SQL适于SQL SERVER:

SELECT

T.TIME

FROM

T LEFT JOIN JF

ON

T.TIME=JF.TIME AND JF.NAME='甲' AND JF.nbcode='0001'

WHERE JF.TIME IS NULL

下面的SQL语句适于ORACLE

SELECT TIME FROM T

MINUS

SELECT TIME FROM JF WHERE NAME='甲' AND nbcode='0001'

既已找出未缴费的月份,剩余的部分你自己补上吧。

祝你好运!

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航