2015-01-23 4 views
0
Id BatchName  TblName   SubBatchName  Status 
1 12032014 Tbl_12032014_raw2_1 raw2   Complete  
2 12032014 Tbl_12032014_raw2_2 raw2   Complete  
3 12182014 Tbl_12182014_raw3_1 raw3   Complete   
4 12182014 Tbl_12182014_raw3_2 raw3   Complete   
5 12182014 Tbl_12182014_raw4_1 raw4   Complete   
6 12182014 Tbl_12182014_raw4_2 raw4   Complete   
7 12062014 Tbl_12062014_raw5_1 raw5   Complete  
8 12062014 Tbl_12062014_raw5_2 raw5   Complete 
9 12062014 Tbl_12062014_raw5_3 raw5   InComplete 

я хочу вывод, как показано нижеКак использовать группу по запросу здесь

BatchName                     
-------------------- 
12032014 
12182014            

Если все строки BatchName имеют статус завершения тогда и только тогда BatchName Получить выберите

Благодарности

ответ

1

Вы хотите, чтобы все BatchName, где были статусы Complete?

Вместо Group By вы можете также использовать NOT EXISTS:

SELECT DISTINCT t1.BatchName 
FROM dbo.TableName t1 
WHERE t1.Status = 'Complete' 
AND NOT EXISTS(SELECT 1 FROM dbo.TableName t2 
       WHERE t1.BatchName = t2.BatchName 
       AND ISNULL(t2.Status,'') <> 'Complete') 

Demo

1

Группировать по партии и только для тех, которые не имеют статуса, кроме Complete

select batchname 
from your_table 
group by batchname 
having sum(case when status <> 'Complete' or status is null 
       then 1 
       else 0 
      end) = 0 
+1

Но это также показывает партии, где статус NULL. http://sqlfiddle.com/#!3/cbc2f/1/0 –

+0

Вы правы. Исправлено. Спасибо http://sqlfiddle.com/#!3/cbc2f/5 –

Смежные вопросы