我正在使用下表
case_id
两行。如果大小写相同,那么我想获取具有Test_script_type
作为自动化的行,而忽略手册。如何使用SQL查询来实现。如果只有手动,则提取手动行。如何使用SQL查询实现它。输出如下:
我们非常感谢您的帮助。多谢您的宝贵时间
答案 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