我有一个表格,显示每个员工,并列出他们申请的职位作为单独的列。
APPNO, Date_Applied, FirstName, LastName, Position1, Position2, Position3
我想返回申请同一员工的额外行的多个职位。因此,如果一个人申请3个不同的职位,那么该员工将返回3个不同的行。
APPNO, Date_Applied, FirstName, LastName, Position1, APPNO, Date_Applied, FirstName, LastName, Position2 APPNO, Date_Applied, FirstName, LastName, Position3
答案 0 :(得分:3)
规范化非常重要,但是这样的事情会起作用:
SELECT APPNO, Date_Applied, FirstName, LastName, Position1 AS position
UNION ALL
SELECT APPNO, Date_Applied, FirstName, LastName, Position2
WHERE Position2 IS NOT NULL
UNION ALL
SELECT APPNO, Date_Applied, FirstName, LastName, Position3
WHERE Position3 IS NOT NULL
答案 1 :(得分:3)
使用CROSS APPLY
的另一种方式:
SELECT t.APPNO,
t.Date_Applied,
t.FirstName,
t.LastName,
x.Position
FROM YourTable t
CROSS APPLY
(
VALUES
(t.Position1),
(t.Position2),
(t.Position3)
) x (Position)
WHERE x.Position IS NOT NULL;
答案 2 :(得分:3)
由于您使用的是SQL Server,因此您也可以使用UNPIVOT函数:
select appono,
date_applied,
firstname,
lastname,
position
from yourtable
unpivot
(
position
for col in (Position1, Position2, Position3)
) unpiv
答案 3 :(得分:0)
这是一回事吗?
选择 APPNO,DATE_APPLIED,First_Name,Last_Name,SEX,RACE,POSITIONS_APPLIED_FOR_1 [位置]
来自 PYAppRole.APPLICNT
联盟
选择 APPNO,DATE_APPLIED,First_Name,Last_Name,SEX,RACE,POSITIONS_APPLIED_FOR_2 [位置]
来自 PYAppRole.APPLICNT
联盟
选择 APPNO,DATE_APPLIED,First_Name,Last_Name,SEX,RACE,POSITIONS_APPLIED_FOR_3 [位置]
来自 PYAppRole.APPLICNT
联盟
选择 APPNO,DATE_APPLIED,First_Name,Last_Name,SEX,RACE,POSITIONS_APPLIED_FOR_4 [位置]
来自 PYAppRole.APPLICNT