简体   繁体   English

获取多个选择查询结果并为单行创建差异列

[英]Taking multiple select query results and making differences columns for a single row

I have a simple select query in db2 that works but I'm trying to find a way to turn result records into columns for one result record. 我在db2中有一个简单的选择查询,但我正在尝试找到一种方法将结果记录转换为一个结果记录的列。 I have: 我有:

SELECT item_id, t2.item_title, t2.item_data
FROM item t1 
INNER JOIN title t2
ON  t1.item_id = t2.item_id

This gives 这给了

item_id | item_title  |   item_data
-----------------------------------
123         Main          Test Title
123         Sub           Subtitle

Is there a way I can alter the select to get the data for each title type as a column and only return one row? 有没有办法可以改变select来获取每个标题类型的数据作为一列,只返回一行?

so I want to get main and sub as their own column and return: 所以我想将main和sub作为自己的列并返回:

item_id | main_data  |   sub_data
-----------------------------------
123      Test Title      Subtitle

This is a pivot operation, and a cross-platform way to achieve it looks like this: 这是一个数据透视操作,实现它的跨平台方式如下所示:

Step 1: break the data into its own columns for main and sub: 第1步:将数据分成自己的主要和子列:

SELECT 
  t1.item_id, 
  CASE WHEN t2.item_title = 'Main' THEN t2.item_data END as main_title,
  CASE WHEN t2.item_title = 'Sub' THEN t2.item_data END as sub_title
FROM item t1 
INNER JOIN title t2
ON  t1.item_id = t2.item_id

Step 2: squish the results down to one row, getting rid of the nulls using group/max 第2步:将结果压缩到一行,使用group / max去掉空值

SELECT 
  t1.item_id, 
  MAX(CASE WHEN t2.item_title = 'Main' THEN t2.item_data END) as main_title,
  MAX(CASE WHEN t2.item_title = 'Sub' THEN t2.item_data END) as sub_title
FROM item t1 
INNER JOIN title t2
ON  t1.item_id = t2.item_id
GROUP BY t1.item_id

This is a pivot operation,you can try this WITH Opening AS( SELECT item_id, t2.item_title, t2.item_data FROM item t1 INNER JOIN title t2 ON 这是一个数据透视操作,您可以尝试使用WITH Opening AS(SELECT item_id,t2.item_title,t2.item_data FROM item t1 INNER JOIN title t2 ON
t1.item_id = t2.item_id) SELECT item_id,Main ,Sub PIVOT( item_data FOR item_title IN([Main],[Sub]) ) as PivotTable FROM Opening; t1.item_id = t2.item_id)SELECT item_id,Main,Sub PIVOT(item_data FOR item_title IN([Main],[Sub]))作为PivotTable FROM Opening;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM