多对多的一个excel表变成三个数据表,使用sql如何查询再变回来?
有一个多对多关系的数据,我使用一个excel设计出来了。
需要编程变成数据库的话需要改成三个表。
那么这三个表如何使用SQL语句查询出一个表来?
下面是例子:
excel里的内容:
姓名 处男证 上岗证 健康证 ...
张一 有 有
张二 有 有
张三 有 有
下面是数据库设计的三个表。
人员表:
人员ID 姓名
1 张一
2 张二
3 张三
证件表:
证件ID 证件名
1 处男证
2 上岗证
3 健康证
持证表:
人员ID 证件ID
1 1
1 3
2 2
2 3
3 1
3 2
我这样的设计是正确的吧。
把EXCEL里面的一个表根据数据库的知识、根据关系分解成三个表。
那么使用SQL语句查询,如何查询出一个表来?
也就是说,使用SQL语句,如何把那个excel表查询出来?
这个想法是否可行呢?
还是根本就无法实现?
查询结果是所有人员的持证情况(人名只出现一次,持证情况为"持证"、"未持证")。
望高手帮帮忙,
补充:需要高手回答的问题有
1.以上我说的是否正确,设计的是否正确?就是多对多这个关系,因为需要打印出来给领导看所以要打到一个表上,如果还有更好的办法,希望高手也指点一下。
2。我这个想法,使用sql语句查询出一个大表,这个思路是否可行?
3。如果能使用SQL语句查询出一个表来,那么把思路写一下,或SQL语句写一下。
4.如果sql语句解决不了,那么说说其他方法解决的思路。
谢谢了。如果嫌分不够,可以直接说。只要能解决问题,分不是问题。
答案:1、表设计没问题
2、使用一个SQL语句肯定查不出来
3、可以使用存储过程构造出一个大的SQL语句,并查处结果;
也可以使用一些第三方控件(比如,devexpress 的 pivot),做一下行列变换,很容易
其他:SELECT 姓名,CASE WHEN 1 IN (SELECT 证件ID FROM 持证表 WHERE 人员ID=A.人员ID) THEN '持证' ELSE '未持证' END AS '处男证',
CASE WHEN 2 IN (SELECT 证件ID FROM 持证表 WHERE 人员ID=A.人员ID) THEN '持证' ELSE '未持证' END AS '上岗证',
CASE WHEN 3 IN (SELECT 证件ID FROM 持证表 WHERE 人员ID=A.人员ID) THEN '持证' ELSE '未持证' END AS '健康证'
FROM 人员表 A 如果证件只有3个,gablfq的回答就可以了。我看你还有省略号,那么可能是可增加的,并且编程时不知道会有多少种证件,那么就不适合使用一个语句来做这个统计表了。
可以使用程序来实现,表头和内容都是可随着数据的增加而增加的。
首先输出表头行(很多列),姓名之后,读出证件表到数据集1当中,循环输出列成表头,并记录到程序的证件数组变量中;
其次输出数据行,读出人员表到数据集2中,循环输出行,一人一行;
在每行输出姓名后还要输出其他列:读取本行人员的持证表到数据集3,或者放置持证数组中,按证件数组变量循环输出剩余列,每列与持证数组比较后,输出是否有这个证件即可。
循环都结束后就可以了,人员比较多的话,还可以针对人员数设置读取最大数,做成翻页。
上一个:EXCEL模糊查询替换
下一个:在一组数据中 如何求出50-100之间的个数是多少? 还有频率的计算如何在EXCEL中体现??