2017-07-24 48 views
1

我有兩列,我正在看一個工作訂單和一個操作編號爲每個工作訂單有一系列的操作1-4,所以它看起來像。SQL顯示組缺少記錄

Job Order  Operation 
------------------------ 
00023   1 
00023   2 
00023   3 
00023   4 
00024   1 
00024   2 
00024   3 
00024   4 
00025   1 
00025   2 
00025   3 
00025   4 
00026   2 
00026   3 
00026   4 

我想顯示所有作業訂單所缺少的操作1.在這個例子中,因爲它們將被分組,我只會看到作業訂單00026的一個實例,因爲這是唯一的工作秩序缺少操作1。 期望放出來會是什麼樣

​​
+0

發表一些所需的輸出.. – Teja

+0

對不起,我讓你要求的變化。 –

回答

3
select Job_Order 
from your_table 
group by Job_Order 
having min(Operation) > 1 
1

有幾種方案來解決這個:

select distinct job_order from table 
where job_order not in (select job_order 
         from table 
         where operation = 1) 

另一條是:

select distinct t1.job_order from table t1 
where not exists (select * 
        from table t2 
        where t2.operation = 1 and t2.job_order = t1.job_order) 

下一個可能是:

select distinct job_order 
from table 
except 
select job_order 
join table 
where operation = 1 
0

上述所有的,爲什麼@奧托的方法只是一個小的可視化是最好的位置:

CREATE TABLE #table ([Job Order] char(5), [Operation] tinyint); 
INSERT INTO #table VALUES 
('00023', 1), 
('00023', 2), 
('00023', 3), 
('00023', 4), 
('00024', 1), 
('00024', 2), 
('00024', 3), 
('00024', 4), 
('00025', 1), 
('00025', 2), 
('00025', 3), 
('00025', 4), 
('00026', 2), 
('00026', 3), 
('00026', 4); 

CREATE CLUSTERED INDEX IX_TEMP_Table_Job_Orde_Operation ON #table ([Job Order], [Operation]); 

select distinct a.[Job Order] from #table a 
where not exists (select * from #table b where a.[Job Order] = b.[Job Order] AND b.[Operation] = 1); 

select [Job Order] 
from #table 
group by [Job Order] 
having min([Operation]) > 1 

select distinct [Job Order] from #table 
where [Job Order] not in (select [Job Order] 
         from #table 
         where [Operation] = 1) 

select distinct [Job Order] 
from #table 
except 
select [Job Order] 
from #table 
where [Operation] = 1 

execution plan