【问题标题】:SQL transform two records into two columnsSQL 将两条记录转换为两列
【发布时间】:2015-03-03 14:17:08
【问题描述】:

我不知道标题是否正确,但基本上我需要这个(查询结果):

r_e_s_id  person_id
89074      161704
89074      161703
89095      161708
89095      161707
68651      129884
68651      129883
81512      161074
81512      161073

要插入/更新(如果表中有 r_e_s_id 值)到表 COMM_PROP 中,该表具有 cols - r_e_s_id, perid1, perid2...像这样:

r_e_s_id   perid1   perid2
89074      161704   161703
89095      161708   161707
68651      129884   129883
81512      161074   161073

我该怎么做?我正在使用 Oracle 11g。

感谢您的帮助!!!

【问题讨论】:

  • 您使用的是什么版本的 Oracle?
  • 如果不是作为不同的列,那么您可以使用字符串聚合技术。根据您的版本,有几种方法。但是,如果您希望它是一个不同的列,那么您需要 UNPIVOT。但是,正如@bluefeet 所说,您需要告诉我们版本。
  • @BohuslavDvorský 你是否只有 2 个 perid 值?还是会不为人知?
  • @bluefeet 我猜测是未知的,因为在描述结果列时出现了省略号。 "r_e_s_id, perid1, perid2..."
  • 我认为这不是一个枢轴案例,你不想转换列中的行,你想要一列的最大值和最小值,正如 Ankit 显示的那样

标签: sql oracle split pivot


【解决方案1】:

仅考虑 2 个值,即每个 r_e_s_id 1 个最大值和 1 个最小值,试试这个:-

 SELECT r_e_s_id, MAX(person_id) AS  perid1, MIN(person_id) AS perid2
 FROM YOUR_TABLE
 GROUP BY r_e_s_id;

【讨论】:

  • 我不明白投票否决。我认为这是一个可能的解决方案。
  • 不是我的投票,但如果它们有两个以上的值会怎样?这行不通
  • 那是我写的Considering only 2 values i.e. 1 max and 1 min per r_e_s_id........从示例中也可以清楚地看到。
  • 感谢您的帮助。这实际上有效。如果有人知道多个值的解决方案 - 超过两个......我也很高兴听到这个:-)
猜你喜欢
  • 2021-11-10
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多