(pl/sql Oracle)怎么把重复的数据合成一行,不是重复的在合成的哪一行后面显示出来

图片说明

(pl/sql Oracle )现在select出来是:上图这样 ,我要怎么把重复的数据合成一行,不是重复的在合成的一行后面显示出来。
显示后大概是这个样子 :

  • 2009111000006 成都市 2009 合作街道办事处清水村四组 空闲地 0.0000 121 坑塘水面 0.0169 114 河流水面 13.4615 111 空闲地 0.0565 121 坑塘水面 0.6411 114 河流水面 16.6105 111

谢谢大佬们了 这是我的sql语句~

                  select 
                  XT_INSTANCE.IID, 
                 XT_INSTANCE.行政区名称, 
                 XT_INSTANCE.年度, 
                 UT_SP_CLASS_AREA_DTL.UNIT_NAME ,
                 ut_sp_dl_dict.dl_name,
                 ut_sp_class_area_dtl2.dl_value,
                 ut_sp_class_area_dtl2.dl_id

                 from XT_INSTANCE,UT_SP_CLASS_AREA_DTL,UT_SP_BUILD_PROJ_LAND,UT_SP_CLASS_AREA_DTL2,ut_sp_dl_dict,sys_landtype_dict   where 1=1
                 and   UT_SP_BUILD_PROJ_LAND.Iid=XT_INSTANCE.Iid
                 and   UT_SP_BUILD_PROJ_LAND.iid=UT_SP_CLASS_AREA_DTL.iid
                 and UT_SP_CLASS_AREA_DTL.Iid=UT_SP_CLASS_AREA_DTL2.Iid
                 and ut_sp_dl_dict.type=2
                 and ut_sp_dl_dict.dl_id=ut_sp_dl_dict.dl_id
                 and ut_sp_dl_dict.dl_id=sys_landtype_dict.pro_code
                 and sys_landtype_dict.pro_code=ut_sp_class_area_dtl2.dl_id

4个回答

注意,以下语句中的max的使用,保证了group by的语法正确,同时不会造成结果的错误
select
XT_INSTANCE.IID,
XT_INSTANCE.行政区名称,
XT_INSTANCE.年度,
UT_SP_CLASS_AREA_DTL.UNIT_NAME ,
max(ut_sp_dl_dict.dl_name) as dl_name,
max(ut_sp_class_area_dtl2.dl_value) as dl_value,
max(ut_sp_class_area_dtl2.dl_id) as dl_id

             from XT_INSTANCE,UT_SP_CLASS_AREA_DTL,UT_SP_BUILD_PROJ_LAND,UT_SP_CLASS_AREA_DTL2,ut_sp_dl_dict,sys_landtype_dict   where 1=1
             and   UT_SP_BUILD_PROJ_LAND.Iid=XT_INSTANCE.Iid
             and   UT_SP_BUILD_PROJ_LAND.iid=UT_SP_CLASS_AREA_DTL.iid
             and UT_SP_CLASS_AREA_DTL.Iid=UT_SP_CLASS_AREA_DTL2.Iid
             and ut_sp_dl_dict.type=2
             and ut_sp_dl_dict.dl_id=ut_sp_dl_dict.dl_id
             and ut_sp_dl_dict.dl_id=sys_landtype_dict.pro_code
             and sys_landtype_dict.pro_code=ut_sp_class_area_dtl2.dl_id

                            GROUP BY   XT_INSTANCE.IID, XT_INSTANCE.行政区名称, XT_INSTANCE.年度, UT_SP_CLASS_AREA_DTL.UNIT_NAME 
chinarealone
chinarealone 回复qq_38081404: sum等聚合指向太明确了,还是推荐max或min
大约 2 年之前 回复
qq_38081404
IT界98新星 稳呀老哥 虽然我已经解决了 之前早点看到就不会耽误这么久了 我加的sum好像加个聚合函数就不会报错了
大约 2 年之前 回复

拿去试试吧

   select 
                 XT_INSTANCE.IID, 
                 XT_INSTANCE.行政区名称, 
                 XT_INSTANCE.年度, 
                 UT_SP_CLASS_AREA_DTL.UNIT_NAME ,
                 ut_sp_dl_dict.dl_name,
                 ut_sp_class_area_dtl2.dl_value,
                 ut_sp_class_area_dtl2.dl_id
                                 wm_concat(ut_sp_dl_dict.dl_name || ' '|| ut_sp_class_area_dtl2.dl_value ||' '|| ut_sp_class_area_dtl2.dl_id)

                 from XT_INSTANCE,UT_SP_CLASS_AREA_DTL,UT_SP_BUILD_PROJ_LAND,UT_SP_CLASS_AREA_DTL2,ut_sp_dl_dict,sys_landtype_dict   where 1=1
                 and   UT_SP_BUILD_PROJ_LAND.Iid=XT_INSTANCE.Iid
                 and   UT_SP_BUILD_PROJ_LAND.iid=UT_SP_CLASS_AREA_DTL.iid
                 and UT_SP_CLASS_AREA_DTL.Iid=UT_SP_CLASS_AREA_DTL2.Iid
                 and ut_sp_dl_dict.type=2
                 and ut_sp_dl_dict.dl_id=ut_sp_dl_dict.dl_id
                 and ut_sp_dl_dict.dl_id=sys_landtype_dict.pro_code
                 and sys_landtype_dict.pro_code=ut_sp_class_area_dtl2.dl_id

                                GROUP BY   XT_INSTANCE.IID, XT_INSTANCE.行政区名称, XT_INSTANCE.年度, UT_SP_CLASS_AREA_DTL.UNIT_NAME 
qq_38081404
IT界98新星 大哥你去我另一个提问里面随便说两句嘛 我把采纳给你 辛苦啦
大约 2 年之前 回复
qq_38081404
IT界98新星 辛苦了大哥 他还是说不是group by表达式
大约 2 年之前 回复

可以尝试一下oracle的wm_contact()函数。

qq_26929957
Cc_Davis_cC 回复qq_38081404: group by 的时候,不要把DL_VALUE,DL_ID放进去了 ,这两列应该是通过关联获取到的,要不然你用wm_concat也不行
大约 2 年之前 回复
qq_38081404
IT界98新星 oracle还是说我不是group by表达式~
大约 2 年之前 回复

完全一样,用distinct不行吗?

qq_38081404
IT界98新星 他~ 不是完全一样的
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问