TSQL:如何根据字符串和日期进行更新?

时间:2017-07-26 11:58:40

标签: sql sql-server tsql sql-server-2014

我收到了一份学生电子表格,其中500名学生没有学生证。我把它作为表导入SQL,我称之为'table a'。

我有另一张桌子,里面有所有学生和他们的身份证,还有生日等等。我称之为'b表'。

目标:
将学生ID从表b复制到表a中。为此,我想我需要根据学生姓名和生日来更新表格。

问题:
我的更新查询是将学生ID复制到具有相同生日的学生,但他们的姓氏不同。因此结果是两个不同的同一个生日的学生最终拥有相同的学生ID。

如何使用正确的学生证更新表格?

我目前的更新声明是将重复的ID放在同一个学生身上:

UPDATE table a
SET EMPStudentID = CAStudentID
FROM #students
WHERE EmpStudentName = CA_STUNAME
         AND EMP_DOB = CA_DOB

谢谢。

示例数据的屏幕截图: enter image description here

样本数据代码:

CREATE TABLE #students (
   EMPStudentID int 
,  EmpStudentName varchar(30)
,  EMP_DOB DATE
,  CA_DOB DATE
,  CA_STUNAME VARCHAR(30)
,  CAStudentID int
)

INSERT INTO #students (EmpStudentName ,EMP_DOB ,CA_DOB ,CA_STUNAME ,CAStudentID)
VALUES 
('Brothers, John',   '20000309',    '20000309', 'Brothers, John',   1111111),
('Campbell, Thomas', '20000107',    '20000107', 'Campbell, Thomas', 2222222),
('Echols, Terry',    '20000309',    '20000309', 'Echols, Terry',    3333333),
('Jones, Bruce',     '20000518',    '20000518', 'Jones, Bruce',     4444444),
('Maxwell, Lauren',  '20000728',    '20000728', 'Maxwell, Lauren',  5555555),
('Feldler, John',    '19991026',    '19991026', 'Feldler, John',    6666666),
('Jenkins, Michael', '19990322',    '19990322', 'Jenkins, Michael', 7777777),
('Taylor, Greg',     '20000428',    '20000428', 'Taylor, Greg',     8888888),
('Williams, Gene',   '20000105',    '20000105', 'Williams, Gene',   9999999),
('Wynn, Charles',    '20000111',    '20000111', 'Wynn, Charles',    1233211)

SELECT * FROM #students

1 个答案:

答案 0 :(得分:2)

请尝试以下

UPDATE  S
SET EMPStudentID = A.CAStudentID

FROM #students S 
INNER JOIN #TableA A
ON S.EmpStudentName = A.CA_STUNAME
         AND S.EMP_DOB = A.CA_DOB

SELECT *  FROM #students