为名称/值对数据创建SQL查询

时间:2016-03-16 13:26:16

标签: sql excel vba excel-vba

我将数据存储在如下表所示的表中,我需要重新排列它。有限的" 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运行查询后重新排列数据,但这种感觉有点不合适。

有没有人知道如何解决它?谷歌搜索一段时间后我没有找到任何东西。

2 个答案:

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