SQL 将行转置为列:透视解决方案
在 SQL 中,将行转置为列是重塑表格数据的有用技术。给定一个表,其中行代表数据点,列代表变量,您可能会遇到需要切换数据方向的场景。
其中一个场景,如问题中所述,涉及包含答案和问题的表格。目标是将响应数据转置为柱状格式,其中每个问题变成一列,每个用户对该问题的响应显示在相应的行中。
要实现这种转置,您可以利用已知的技术作为“枢轴查询”。以下 SQL 语句演示了使用 PostgresSQL 的解决方案:
SELECT r.user_id, MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS "Do you like apples?", MAX(CASE WHEN r.question_id = 2 THEN r.body ELSE NULL END) AS "Do you like oranges?", MAX(CASE WHEN r.question_id = 3 THEN r.body ELSE NULL END) AS "Do you like carrots?" FROM RESPONSES r JOIN QUESTIONS q ON q.id = r.question_id GROUP BY r.user_id
此查询使用条件聚合根据问题 ID 对响应值进行分组和聚合。 CASE 语句提取每个问题的答案并将其分配到特定列。 MAX() 函数用于确保仅包含每个问题-用户对的最新响应。
此查询的输出将类似于所需的转置格式,其中每个用户的 ID 列在第一个中列,后跟每个问题的一列,其中包含用户的响应(如果不存在响应,则为 NULL)。
此数据透视查询是在 SQL 中将行转置为列的标准方法。它提供了一个高效、灵活的解决方案,用于动态处理任意数量的问题和响应组合。
以上是如何使用数据透视查询在 SQL 中将行转置为列?的详细内容。更多信息请关注PHP中文网其他相关文章!