SQL:如何在列中查找不同的值?

问题描述 投票:0回答:0

我有以下 Oracle SQL 表,其中

product_id
101 和 103 分别在
attr1
attr3
列中具有不同的值。

data

| PRODUCT_ID | ATTR1 | ATTR2 | ATTR3 |
|------------|-------|-------|-------|
| 101        | a     | x     | z     |
| 101        | a     | x     | z     |
| 101        | aa    | x     | z     |
| 102        | b     | y     | z     |
| 102        | b     | y     | z     |
| 103        | c     | z     | z     |
| 103        | c     | z     | zz    |

如果有 7000 行和 30 列要检查此逻辑,获得突出显示差异的输出查询的最有效方法是什么?

output

| PRODUCT_ID | DESCR            |
|------------|------------------|
| 101        | Issue with attr1 |
| 103        | Issue with attr3 |

query

WITH data AS (
   
   SELECT 101 product_id, 'a' attr1, 'x' attr2, 'z' attr3 FROM dual
   UNION ALL
   SELECT 101 product_id, 'a' attr, 'x' attr2, 'z' attr3  FROM dual
   UNION ALL
   SELECT 101 product_id, 'aa' attr, 'x' attr2, 'z' attr3  FROM dual
   UNION ALL
   SELECT 102 product_id, 'b' attr, 'y' attr2, 'z' attr3  FROM dual
   UNION ALL
   SELECT 102 product_id, 'b' attr, 'y' attr2, 'z' attr3  FROM dual
   UNION ALL
   SELECT 103 product_id, 'c' attr, 'z' attr2, 'z' attr3  FROM dual
   UNION ALL
   SELECT 103 product_id, 'c' attr, 'z' attr2, 'zz' attr3  FROM dual
   
)

SELECT product_id, 'Issue with attr1' descr FROM data GROUP BY product_id HAVING COUNT(DISTINCT attr1) > 1
UNION
SELECT product_id, 'Issue with attr2' descr FROM data GROUP BY product_id HAVING COUNT(DISTINCT attr2) > 1
UNION
SELECT product_id, 'Issue with attr3' descr FROM data GROUP BY product_id HAVING COUNT(DISTINCT attr3) > 1
;
sql oracle-sqldeveloper window-functions
© www.soinside.com 2019 - 2024. All rights reserved.