如何检查特定ID的Oracle列值是否完全相同?

时间:2015-10-13 01:42:55

标签: sql oracle plsql oracle11g

如果这五列的所有列值相同,我试图找出确定Oracle 11g表中特定ID的最佳方法,该表有5列,并且对这个ID说100行。 / p>

例如:

表名: TABLE_DATA

列:

TD_ID   ID      COL1    COL2    COL3    COL4    COL5
-----------------------------------------------------------------------
1       1       1       0       3       2       0
2       1       1       0       3       2       0
3       1       1       0       3       2       0
4       1       1       0       3       2       0
5       1       1       0       3       2       0
6       1       1       0       3       2       0

所以基于上面的例子,现在只显示6行ID:1,我想检查ID = 1的所有COL1,COL2,COL3,COL4和COL5值,告诉我是否全部值从第一行到最后一行是相同的 - 如果是,则返回'Y',否则返回'N'

鉴于上面的例子,结果将是'Y'但是例如,如果TD_ID = 5且COL3 = 4则结果将是'N',因为所有列值都不相同,即:

TD_ID   ID      COL1    COL2    COL3    COL4    COL5
-----------------------------------------------------------------------
1       1       1       0       3       2       0
2       1       1       0       3       2       0
3       1       1       0       3       2       0
4       1       1       0       3       2       0
5       1       1       0       4       2       0
6       1       1       0       3       2       0

我只是不确定确定这个的最快方法是什么,因为我正在查看的表可能在表中有超过2000行的特定ID。

3 个答案:

答案 0 :(得分:3)

你也可以试试这个:

Select ID 
, case when count(distinct COL1 || COL2 || COL3 || COL4 || COL5) > 1 
  then 'N'
  else 'Y' end RESULT
From TABLE_DATA
Group by id;

通过这种方式,您可以按ID分组并计算有多少不同的组合。 如果只有1,那么所有行都有相同的值集,否则不会。

答案 1 :(得分:2)

查看以下内容是否足够快:

SELECT ID, CASE WHEN COUNT(*) > 1 THEN 'No' ELSE 'Yes' END As "Result"
FROM (SELECT DISTINCT ID, COL1, COL2, COL3, COL4, COL5
      FROM Table_Data) dist
GROUP BY ID      

答案 2 :(得分:0)

这里有一个小问题,您可能想尝试一下(最终,您可以尝试为您找出更好的MINUS声明):

SELECT
  CASE 
    WHEN (  -- select count of records from a subquery
            SELECT 
              COUNT(1) 
            FROM
            ( -- select all rows where id = 1
              SELECT
                td.col1
                ,td.col2
                ,td.col3
                ,td.col4
                ,td.col5
              FROM
                table_data td
              WHERE
                td.id = 1
              MINUS -- substract the first row of the table with id = 1
              SELECT
                td.col1
                ,td.col2
                ,td.col3
                ,td.col4
                ,td.col5
              FROM
                table_data td
              WHERE
                td.id = 1
                AND ROWNUM = 1
            )
        ) = 0 -- check if subquery's count equals 0
        AND EXISTS (  -- and exists at least 1 row in the table with id = 1
          SELECT
            1
          FROM
            table_data td
          WHERE
            td.id = 1
            AND ROWNUM = 1
        ) THEN 'Y' 
    ELSE 'N' 
  END AS equal
FROM
  dual