为名称/值对数据创buildSQL查询

我将数据存储在下面的表格中,我需要重新排列它。 Theres数量有限的“FieldName”条目。 这些应该作为标题为“FieldValue”数据。 数据存储在Excel工作簿中供进一步使用。 我不可能改变数据的存储方式和/或重新devise表格。

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将数据join其他数据。

目前,我正在使用Excel工作簿中的vba运行查询后重新排列数据,但这种感觉非常不正常。

有没有人有一些想法如何解决它? Googlesearch了一会之后我什么也没find。

你可以像这样使用条件聚合:

 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 
 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;