我想在一个表中统计某个人的未缴费纪录改怎么写?
比如,在表 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'
既已找出未缴费的月份,剩余的部分你自己补上吧。
祝你好运!