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问题。)