3

各従業員を表示し、彼らが応募したポジションを個別の列としてリストするテーブルがありました。

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

同じ従業員の追加の行として応募された複数のポジションを返したいと思います。したがって、1 人が 3 つの異なるポジションに応募した場合、その 1 人の従業員に対して 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

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 に答える
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 に答える
0

これは同じものですか?

APPNO , DATE_APPLIED, First_Name, Last_Name, SEX, RACE, POSITIONS_APPLIED_FOR_1 [Position]
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 [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 に答える