我将数据存储在如下表所示的表中,我需要重新排列它。有限的" FieldName"条目。这些应该作为" FieldValue"的标题。数据。数据存储在Excel工作簿中以供进一步使用。我无法改变数据的存储方式和/或重新设计表格。
ID | Source | FieldName | FieldValue
--------------------------------------------
1 | EMail | From | Sender
1 | EMail | To | Receiver
1 | EMail | Subject | Whatever
2 | EMail | From | Another Sender
2 | EMail | To | Another Receiver
2 | EMail | Subject | Other Text
3 | Letter | From | 3rd Sender
3 | Letter | To | asdg
3 | Letter | Subject | odasda
这是决赛桌的样子。
ID | Source | From | To | Subject
-----------------------------------------------------------------
1 | EMail | Sender | Receiver | Whatever
2 | EMail | Another Sender | Another Receiver | Other Text
3 | Letter | 3rd Sender | asdg | odasda
这样做的目的是 - 通过这样的数据 - 我可以通过ID将数据加入到其他数据中。
目前,我在Excel工作簿中使用vba运行查询后重新排列数据,但这种感觉有点不合适。
有没有人知道如何解决它?谷歌搜索一段时间后我没有找到任何东西。
答案 0 :(得分:1)
你可以像这样使用条件聚合:
SELECT t.id,t.source
max(CASE WHEN t.fieldname = 'From' then t.FieldValue end) as From_col,
max(CASE WHEN t.fieldname = 'To' then t.FieldValue end) as To_col,
max(CASE WHEN t.fieldname = 'Subject' then t.FieldValue end) as Subject_col
FROM YourTable t
GROUP BY t.id,t.source
答案 1 :(得分:1)
SELECT id,
source,
MAX(DECODE(fieldname,'From',FieldValue)) f_From,
MAX(DECODE(fieldname,'To',FieldValue)) f_To ,
MAX(DECODE(fieldname,'Subject',FieldValue)) f_Subject
FROM table
GROUP BY id,
source;