[英]Transposing SQL rows data to column
在 SQL 中,我們需要按以下方式轉換表:
表格1:
+-----+---------+-----------+
| ID | insured | DOD |
+-----+---------+-----------+
| 123 | Pam | 6/18/2013 |
| 123 | Nam | 2/12/2010 |
| 123 | Tam | 2/10/2013 |
| 456 | Jessi | 4/6/2003 |
| 457 | Ron | 4/10/2010 |
| 457 | Tom | 5/5/2008 |
+-----+---------+-----------+
所需的 output 表:
+-----+---------+-----------+-----------+-----------+
| ID | insured | DOD1 | DOD2 | DOD3 |
+-----+---------+-----------+-----------+-----------+
| 123 | Pam | 6/18/2013 | 2/12/2010 | 2/10/2013 |
| 456 | Jessi | 4/6/2003 | null | null |
| 457 | Ron | 4/10/2010 | 5/5/2008 | null |
+-----+---------+-----------+-----------+-----------+
我在某處看到我們可以使用 pivot 和 unpivot,但我不確定如何在這里使用它。
非常感謝您的幫助。
假設您真的想要 - 或可以接受 - 降序排列的日期,那么您可以為此使用條件聚合:
select id,
max(case when seqnum = 1 then insured end) as insured,
max(case when seqnum = 1 then dod end) as dod_1,
max(case when seqnum = 2 then dod end) as dod_2,
max(case when seqnum = 3 then dod end) as dod_3
from (select t.*,
row_number() over (partition by id order by dod desc) as seqnum
from t
) t
group by id;
如果您想保留原始順序,那么您的問題沒有足夠的信息。 如果您有一列具有排序,則可用於row_number()
。
我會像這樣運行它,猜測您的 id 是一個數字並且您只想要那些記錄。 從垂直到水平,pivot是最佳選擇
select id , insured, DOD from yourtable
pivot(max(DOD) for ID in (123,456,457));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.