比较记录并显示具有不同值的列名称

时间:2017-07-15 18:58:50

标签: sql oracle plsql oracle-sqldeveloper

这是我的样本表。我有多个错误#1是Err#2

Err#    ItemNo  Price   Company   Model
2       101     50      ABC       A12
2       101     50      ABC       A12
2       101     50      ABC       A13
2       102     30      XYZ       B1C
2       102     40      ZYZ       B1C
2       103     80      MNO       AL5
2       103     90      MNR       AL9

Er#2 - 我收到一条错误消息“Same ItemNo与其他列的值不同”理想情况下,它不应该具有相同ItemNO的不同值。

这是什么意思是ItemNo 101价格相同,公司在所有3条记录中都是相同的,但是模型不同,它有A12和A13都是错误的。

每当我们有相同的ItemNo具有不同的值时,它应该显示列名称,其具有根据项目编号的不同值。

O / P应该是

  • 对于所有101个记录,它应打印为 - 相同的项目没有不同的模型值
  • 对于所有102个记录它应该打印为 - 相同的物品没有不同的价格,公司
  • 对于所有103条记录,它应打印为 - 相同的项目没有不同的价格,公司模式

1 个答案:

答案 0 :(得分:0)

您可以这样做:

select itemno,
       substr( (case when min(price) <> max(price) then ',price' end) ||
               (case when min(company) <> max(company) then ',company' end) ||
               (case when min(model) <> max(price) then ',model' end),
               2) as columns_with_differences               
from t
group by itemno;