将多个列值作为新行返回SQL
我有一张表格显示每个员工,并列出他们作为单独列应用的职位。将多个列值作为新行返回SQL
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
标准化是非常重要的,但像这样的工作:
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
使用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;
由于您使用的SQL Server,你也可以使用UNPIVOT功能:
select appono,
date_applied,
firstname,
lastname,
position
from yourtable
unpivot
(
position
for col in (Position1, Position2, Position3)
) unpiv
+1另一种选择(和回来) – Lamak 2013-04-26 20:35:40
哇感谢您的快速回复! – 2013-04-26 21:14:26
这是一样的东西吗?
选择 APPNO,DATE_APPLIED,名字,姓氏,性别,种族,POSITIONS_APPLIED_FOR_1 [位置]
从 PYAppRole.APPLICNT
工会
选择 APPNO,DATE_APPLIED,名字,姓氏,性别, RACE,POSITIONS_APPLIED_FOR_2 [位置]
从 PYAppRole.APPLICNT
工会
选择 APPNO,DATE_APPLIED,名字,姓氏,性别,种族,POSITIONS_APPLIED_FOR_3 [位置]
从 PYAppRole.APPLICNT
工会
选择 APPNO,DATE_APPLIED,名字,姓氏,性别,种族,POSITIONS_APPLIED_FOR_4 [位置]
从 PYAppRole.APPLICNT
+1为简单起见 – Lamak 2013-04-26 20:14:33