当前位置: 首页 > 面试题库 >

SQL合并具有相同ID但列值不同的两行(Oracle)

姚建树
2023-03-14
问题内容

我正在尝试将具有相同ID但具有不同列值的不同行合并为一个。

例如 :

    (table1)

    id       colour

    1        red
    1        blue
    2        green
    2        red

我希望将其结合起来,这样结果是:

    id     colour1    colour2

    1      red        blue
    2      green      red

或者

    id     colour

    1      red, blue
    2      green, red

或上述内容的任何其他变体,以使行以某种方式连接在一起。

任何帮助,将不胜感激!提前致谢。


问题答案:

请先阅读我的评论-除非仅用于报告目的,否则您甚至都不要考虑这样做,并且您想了解如何在普通SQL中做到这一点(而不是使用报告的正确解决方案)工具)。

第二种格式最简单,特别是如果您不关心颜色出现的顺序时:

select   id, listagg(colour, ', ') within group (order by null)
from     table1
group by id

order by null表示随机订购。如果要订购其他商品,请在中order by使用listagg()。例如,要按字母顺序排列颜色,可以说within group (order by colour)

对于第一种格式,您需要对列数进行先验限制,并且其操作方式取决于您使用的Oracle版本(在此处和在其他讨论区发布的每个问题中都应始终包含该限制)
)。这个概念称为“透视”。从版本11开始,Oracle具有您可以使用的显式PIVOT运算符。



 类似资料:
  • 问题内容: 该主题的解决方案使我不知所措。 我有一个看起来像的表格(除与我的问题无关的其他字段之外): 名称,卡号,会员类型 现在,我想要一个显示卡号和成员类型相同的行的视图。这两个字段都是整数。名称为VARCHAR。名称不是唯一的,并且相同的名称也应显示重复的卡号,会员类型。 即,如果下表是表格: 我想要: 只需按卡号排序即可使其对人类有用。 最有效的方法是什么? 问题答案: 由于您提到的名称可

  • 我有一个示例数据集,如下所示 Col1 Col2 Col3 A 1,2,3 A123 A 4,5 A456 A 1,2,3 A456 A 4,5 A123 我参考了一些解决方案,并尝试了以下方法。但它只追加单个列。

  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 问题内容: 我确信必须有一个相对简单的方法来执行此操作,但是此刻正在使我逃脱。假设我有一个这样的SQL表: 现在,我想知道A和B列的每种值组合出现多少次,而与其他列无关。因此,在此示例中,我想要这样的输出: 用什么SQL来确定呢?我觉得这绝对不是一件很不常见的事情。 谢谢! 问题答案:

  • exTab 如何使用SQL(与mySQL一起)只返回col1中具有多个相同值、col2中具有多个相同值、但COL3中具有唯一值的行? 例如,在上面的表(exTab)中,val1在col1中出现了4次,对于这4次,val4在col2中出现了3次,但是对于这3次,val7在col3中只出现了一次,所以我想返回这一行(第1行)。考虑到这些条件,第1行将是我希望从此表返回的唯一一行。 我试过和group

  • 问题内容: 我有两个表(表A和表B)。 它们具有不同的列数-假设表A具有更多列。 如何合并这两个表,并为表B没有的列获取空值? 问题答案: 为具有较少列的表添加额外的列作为null