SQL查询以获取具有相同ID但其他列中的值不同的行

时间:2019-12-27 09:03:41

标签: mysql sql

我正在使用下表

enter image description here

case_id两行。如果大小写相同,那么我想获取具有Test_script_type作为自动化的行,而忽略手册。如何使用SQL查询来实现。如果只有手动,则提取手动行。如何使用SQL查询实现它。输出如下:enter image description here

我们非常感谢您的帮助。多谢您的宝贵时间

4 个答案:

答案 0 :(得分:1)

您可以通过不存在的地址来解决此问题:

select t.*
from mytable t
where
    script_type = 'Automation'
    or not exists (
        select 1 
        from mytable t1 
        where 
            t1.case_id = t.case_id 
            and t1.script_name <> t.script_name 
            and t1.script_type = 'Automation'
    )

您还可以使用相关子查询进行过滤:

select t.*
from mytable t
where t.script_type = (
    select min(t1.script_type) -- This gives priority to 'Automation' against 'Manual'
    from mytable t1
    where t1.case_id = t.case_id
)

答案 1 :(得分:0)

如果您使用的是MSSQL Server,则可以在下面的查询中尝试-

SELECT *
FROM (SELECT CASE_ID, SCRIPT_NAME, SCRIPT_TYPE, ROW_NUMBER() OVER(PARTITION BY CASE_ID ORDER BY SCRIPT_TYPE) RN
      FROM YOUR_TAB) T
WHERE RN = 1

答案 2 :(得分:0)

SELECT t1.*
FROM `table` t1
LEFT JOIN `table` t2 ON t1.case_id = t2.case_id AND t1.script_type != t2.script_type
WHERE t1.script_type = 'automation' OR t2.case_id IS NULL

答案 3 :(得分:0)

您可以执行以下操作:

WITH cte AS (
  SELECT T1.CASE_ID, T1.SCRIPT_NAME, T1.SCRIPT_TYPE,
  COUNT(T1.CASE_ID) OVER (PARTITION BY T1.CASE_ID) AS cnt
  FROM table1 T1
)

SELECT cte.CASE_ID, cte.SCRIPT_NAME, cte.SCRIPT_TYPE
FROM cte
WHERE (cte.cnt > 1 AND UPPER(cte.SCRIPT_TYPE) = UPPER('AUTOMATION'))
OR cte.cnt = 1

WITH语句添加一列来计算case_id值重复的次数,这有助于标识您要使用的行。

以下是使用您提供的数据的示例:SQLFiddle