3

我有一个表格,显示每个员工并将他们申请的职位列为单独的列。

APPNO、Date_Applied、名字、姓氏、位置 1、位置 2、位置 3

我想将申请的多个职位作为同一员工的附加行返回。因此,如果一个人申请了 3 个不同的职位,它将为该员工返回 3 个不同的行。

APPNO、Date_Applied、FirstName、LastName、Position1、
APPNO, Date_Applied, FirstName, LastName, Position2
APPNO, Date_Applied, FirstName, LastName, Position3
4

4 回答 4

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;
于 2013-04-26T20:14:26.963 回答
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
于 2013-04-26T20:07:53.383 回答
3

由于您使用的是 SQL Server,因此您还可以使用 UNPIVOT 函数:

select appono,
  date_applied,
  firstname,
  lastname,
  position
from yourtable
unpivot
(
  position
  for col in (Position1, Position2, Position3)
) unpiv
于 2013-04-26T20:32:17.867 回答
0

这是一回事吗?

选择 APPNO, DATE_APPLIED, First_Name, Last_Name, SEX, RACE, POSITIONS_APPLIED_FOR_1 [Position]
from PYAppRole.APPLICNT
union
select APPNO, DATE_APPLIED, First_Name, Last_Name, SEX, RACE, POSITIONS_APPLIED_FOR_2 [Position]
from PYAppRole.APPLICNT
union
select APPNO, DATE_APPLIED, First_Name , Last_Name, SEX, RACE, POSITIONS_APPLIED_FOR_3 [Position]
from PYAppRole.APPLICNT
union
select APPNO, DATE_APPLIED, First_Name, Last_Name, SEX, RACE, POSITIONS_APPLIED_FOR_4 [Position]
from PYAppRole.APPLICNT

于 2013-04-26T21:31:18.013 回答