当前位置:数据库 > Excel >>

多对多的一个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中体现??

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,