如何解决使用来自两个不同表的数据创建表
我的要求是在多行中用个人ID,课程ID和日期填充表格。我有表1,其中行和课程的人员ID和日期为列。我的表2中的课程代码与表1中的列值相关。
表1
+----------+------------+------------+------------+------------+------------+------------+------------+
| PersonID | C1 | C2 | C3 | C4 | C5 | C6 | C7 |
+----------+------------+------------+------------+------------+------------+------------+------------+
| 1780 | 3/05/2016 | 18/04/2016 | 6/12/2017 | 6/12/2018 | 14/12/2015 | 14/12/2015 | 18/04/2016 |
| 1781 | 17/01/2019 | 11/03/2019 | 9/05/2019 | 15/11/2019 | 15/11/2019 | 18/08/2017 | 11/03/2019 |
| 1898 | 19/08/2019 | 30/03/2020 | 19/08/2019 | 31/03/2020 | NULL | 16/08/2019 | 31/03/2020 |
| 1899 | 23/09/2019 | 29/11/2019 | 8/05/2020 | 23/09/2019 | 18/12/2019 | 9/09/2019 | 9/09/2019 |
+----------+------------+------------+------------+------------+------------+------------+------------+
表2
+-----+--------+
| CID | COMPID |
+-----+--------+
| C1 | 1653 |
| C2 | 1151 |
| C3 | 1155 |
| C4 | 6724 |
| C5 | 4016 |
| C6 | 3220 |
| C7 | 1855 |
| C8 | 6757 |
| C9 | 7591 |
| C10 | 6910 |
+-----+--------+
目的是用人ID,课程ID和日期的多行填充表格。像下面这样。
输出表
+----------+--------+------------+
| PersonID | CompID | Date |
+----------+--------+------------+
| 1780 | 1653 | 3/05/2016 |
| 1780 | 1151 | 18/04/2016 |
| 1780 | 1155 | 6/12/2017 |
| 1780 | 6724 | 6/12/2018 |
| 1780 | 4016 | 14/12/2015 |
| 1780 | 3220 | 14/12/2015 |
| 1780 | 1855 | 18/04/2016 |
| 1781 | 1653 | 17/01/2019 |
| 1781 | 1152 | 11/03/2019 |
| 1781 | 1155 | 9/05/2019 |
| 1781 | 6724 | 15/11/2019 |
| 1781 | 4016 | 15/11/2019 |
| 1781 | 3220 | 18/08/2017 |
| 1781 | 1855 | 11/03/2019 |
+----------+--------+------------+
我不是SQL方面的专家。因此,寻求帮助。预先感谢!
更新:
谢谢大家的建议。我使用下面的代码来完成此工作。
SELECT PersonID,Compliance,b.COMPID,Date_
FROM
(SELECT PersonID,C1,c2,c3,c4,c5 ....Cn
FROM Table1) p
UNPIVOT
(Date_ FOR Compliance IN
( C1,c5....Cn)
)AS unpvt
join Table2 b on unpvt.Compliance = b.CID
GO
Sasi
解决方法
您应该先取消数据,然后再join
。最通用的方法使用union all
,但是不同的数据库可能会有更好的方法(特别是横向联接)。
所以:
select p.personid,c.compid,p.date
from ((select t1.personid,t1.c1 as date,'C1' as cid from table1) union all
(select t1.personid,t1.c2,'C2' from table1) union all
(select t1.personid,t1.c3,'C3' from table1) union all
. . .
) p left join
table2 t2
on t2.cid = p.cid;
请注意,table1
的格式很差。每个人最好有多行而不是多列。
编辑:
在SQL Server中,我建议使用CROSS APPLY
:
select t1.personid,v.date
from table1 t1 cross apply)
(values (c1,'C1),(c2,'C2'),. . .
) v(date,cid) join
table2 t2
on t2.cid = v.cid;
,
您必须学习数据透视表,
- 表1应该以示例为中心:http://www.buraksecer.com/sql-pivot-kullanimi/
- 表1是(PersonId,CID,Date)。
- 我们现在有了所需的记录,现在我们将在两个表之间进行连接。示例:https://www.w3schools.com/sql/sql_join.asp
我希望这项工作! :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。