Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除单行中的重复值_Sql_Oracle - Fatal编程技术网

Sql 删除单行中的重复值

Sql 删除单行中的重复值,sql,oracle,Sql,Oracle,我有一个在单行中有重复值的输出,我的目标是删除单行中存在的任何重复值 我已经写了很多行的案例陈述试图纠正这个问题,但我希望有一个更简单的方法 以下是一个示例输出: BRAND_SEG S_GROUP_1 CS_GROUP_2 CS_GROUP_3 CS_GROUP_4 CS_GROUP_5 3D G11C G11C G3C G11C G1C 我的目标是让它看起来像这样: BRAND_SEG S_GROUP_1

我有一个在单行中有重复值的输出,我的目标是删除单行中存在的任何重复值

我已经写了很多行的案例陈述试图纠正这个问题,但我希望有一个更简单的方法

以下是一个示例输出:

BRAND_SEG S_GROUP_1  CS_GROUP_2 CS_GROUP_3 CS_GROUP_4 CS_GROUP_5

       3D      G11C        G11C        G3C       G11C        G1C
我的目标是让它看起来像这样:

BRAND_SEG  S_GROUP_1  CS_GROUP_2 CS_GROUP_3

       3D       G11C         G3C        G1C

您可以取消PIVOT并重新聚合。在Oracle 12C中,您可以执行以下操作:

select brand_seg
       max(case when seqnum = 1 then s_group end) as s_group_1,
       max(case when seqnum = 2 then s_group end) as s_group_2,
       max(case when seqnum = 3 then s_group end) as s_group_3,
       max(case when seqnum = 4 then s_group end) as s_group_4,
       max(case when seqnum = 5 then s_group end) as s_group_5
from (select t.brand_seg, s_group,
             dense_rank() over (order by s_group) as seqnum
      from t cross join lateral
           (select S_GROUP_1 as s_group from dual union  -- to remove duplicates
            select S_GROUP_2 as s_group from dual union
            select S_GROUP_3 as s_group from dual union
            select S_GROUP_4 as s_group from dual union
            select S_GROUP_5 as s_group from dual 
           ) s
      ) s
group by brand_seg;

在Oracle的早期版本中,您可以使用
union
而不是侧向联接。

为什么
CS\u GROUP_2
在第二个数据集中变成
G3C
而不是
G11C
?与CS组3相同。另外,您应该提供您查询的样本数据。请提供一个最小的可复制示例。Pavel,它发生了变化,因为我希望消除行中的重复值。我不确定代码应该如何编写。有一些方法可以使用动态SQL来实现这一点,但它们非常复杂和混乱。你确定你真的需要这样的解决方案吗?处理关系数据时,列应该是静态的。表示结果的更好方法是一个包含三列的表:品牌SEG、S_组编号和S_组值。99%的情况下,当有人要求动态列时,他们并不真正想要动态列。如果你认为你有特殊情况,你应该解释原因。(这可能就是你被否决的原因,人们认为你在问XY问题。)