获取多个选择查询结果,并为单行添加差异列

时间:2019-09-12 04:17:06

标签: sql db2

我在db2中有一个简单的选择查询,该查询可以工作,但是我试图找到一种将结果记录变成一个结果记录的列的方法。我有:

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

这给

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

有没有一种方法可以更改选择,以获取每种标题类型的数据作为列,而只返回一行?

所以我想将main和sub作为自己的列并返回:

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

2 个答案:

答案 0 :(得分:3)

这是一个枢轴操作,实现它的跨平台方式如下:

步骤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

第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

答案 1 :(得分:0)

这是一项重要操作,您可以尝试 随着开幕AS(         选择             item_id,             t2.item_title,             t2.item_data         从项目t1         INNER JOIN标题t2 ON
            t1.item_id = t2.item_id) 选择      item_id,主要,子      枢(         item_data         FOR item_title IN([主],[子])      )作为数据透视表 从开头开始;