我有每個記錄代表一個人的桌子以及用於指示他們參加什麼活動的列列基於價值觀多行:轉換單列成
CREATE TABLE EventAttendees
(
Person VARCHAR(100),
[Event A] VARCHAR(1),
[Event B] VARCHAR(1),
[Event C] VARCHAR(1)
)
INSERT INTO EventAttendees
SELECT 'John Smith','x',NULL,NULL
UNION
SELECT 'Jane Doe',NULL,'x','x'
UNION
SELECT 'Phil White','x',NULL,'x'
UNION
SELECT 'Sarah Jenkins','x','x','x'
它看起來像這樣的例子:
SELECT * FROM Event Attendees
/---------------|---------|---------|---------\
| Person | Event A | Event B | Event C |
|---------------|---------|---------|---------|
| John Smith | x | NULL | NULL |
| Jane Doe | NULL | x | x |
| Phil White | x | NULL | x |
| Sarah Jenkins | x | x | x |
\---------------|---------|---------|---------/
我要生成誰出席了活動,所以我期望的輸出是一個列表:
/---------------|---------|
| Person | Event |
|---------------|---------|
| John Smith | Event A |
| Jane Doe | Event B |
| Jane Doe | Event C |
| Phil White | Event A |
| Phil White | Event C |
| Sarah Jenkins | Event A |
| Sarah Jenkins | Event B |
| Sarah Jenkins | Event C |
\---------------|---------/
在現實中,我有超過3個事件,但以上是爲了便於解釋(這是而不是作業問題btw)。由於事件將來可能會發生變化,而且我無法控制傳遞的數據,所以我真的需要一個動態解決方案,它可以處理任意數量的可能事件列。
我假設我可以用UNPIVOT
做一些事情,但我無法弄清楚,或找到一個很好的例子,在SO或其他地方工作 - 有人可以幫忙嗎?
但是如果我有200個事件列,我需要200個子查詢'UNION'ed在一起?我正在尋找一種方法,如果可能的話,動態地做到這一點。 – 3N1GM4
您是否爲每個新事件生成新列? – Yeou
我不是個人,但我正在傳遞的數據集是這樣做的,是的。 – 3N1GM4