非常抱歉在此话题上提交另一个问题,但我已经阅读了许多答案,似乎对我没有用。
我有三个表格需要连接并提取信息。其中一个表格仅具有3列,并以垂直方式存储数据。我想将该数据转换为水平格式。
如果我只是连接并提取数据,它将如下所示:
SELECT
a.app_id,
b.field_id,
c.field_name,
b.field_value
FROM table1 a
JOIN table2 b ON a.app_id = b.app_id
JOIN table3 c ON b.field_id = c.field_id --(table3 is a lookup table for field names)
结果:
app_id | field_id | field_name | field_value
-----------------------------------------------------
1234 | 101 | First Name | Joe
1234 | 102 | Last Name | Smith
1234 | 105 | DOB | 10/15/72
1234 | 107 | Mailing Addr | PO BOX 1234
1234 | 110 | Zip | 12345
1239 | 101 | First Name | Bob
1239 | 102 | Last Name | Johnson
1239 | 105 | DOB | 12/01/78
1239 | 107 | Mailing Addr | 1234 N Star Ave
1239 | 110 | Zip | 12456
相反,我想让它看起来像这样:
app_id | First Name | Last Name | DOB | Mailing Addr | Zip
--------------------------------------------------------------------------
1234 | Joe | Smith | 10/15/72 | PO BOX 1234 | 12345
1239 | Bob | Johnson | 12/01/78 | 1234 N Star Ave | 12456
过去,我只是在我的数据中查找所有需要的field_id,并为每个字段创建CASE语句。用户使用的应用程序包含多个产品的数据,每个产品包含不同的字段。考虑到支持的产品数量和每个产品的字段数量(比上面显示的基本示例要多得多),查找它们并编写大块的CASE语句需要很长时间。
我想知道是否有一些作弊代码可以实现我所需的功能,而无需查找field_ids并编写内容。我知道PIVOT函数可能是我要寻找的,但我似乎无法使其正常工作。
你们能帮忙吗?