2016-10-07 4 views
1

Я folllowing выберите запросвыберите Результат запроса фильтр, используя, если условия

   SELECT 
       Table.ID     
       SUM(CASE WHEN Table.Status = 1 THEN 1 ELSE null END) AS NormalCount, 
       SUM(CASE WHEN Table.status = 2 THEN 1 ELSE null END) AS AbnormalCount 
       FROM Table     
       GROUP BY Table.ID 

Я хочу, чтобы получить над результатами и генерировать новый набор результатов со следующими условиями

IF(NormalCount > 0 or AbnormalCount == NULL) 
       SELECT 
       Table.ID     
       Table.Status AS "Normal" 
       FROM Table     
       GROUP BY Table.ID 

ELSE IF (AbnormalCount > 0) 
       SELECT 
       Table.ID  
       Table.Status AS "Abnormal" 
       SUM(CASE WHEN Header.status = 2 THEN 1 ELSE null END) AS AbnormalCount 
       FROM Table     
       GROUP BY Table.ID 
+0

Вы используете MySQL или SQL Server? –

+0

Я использую SQL Server – kez

+0

AbnormalCount == NULL ?? в SQL Server? – Aditya

ответ

3

Я думаю, что логика вы хотите чтобы маркировать каждую группу ID как ненормальную, если она имеет одно или несколько аномальных наблюдений. Если да, то вы можете использовать другой оператор CASE, чтобы проверить условную аномальную сумму и соответствующим образом присвоить статус. У нормальных групп была бы характеристика ненормального отсчета нуля, но этот счет будет отображаться для всех групп.

SELECT t.ID, 
     CASE WHEN SUM(CASE WHEN t.status = 2 THEN 1 ELSE 0 END) > 0 
      THEN "Abnormal" 
      ELSE "Normal" END AS Status, 
     SUM(CASE WHEN t.status = 2 THEN 1 ELSE 0 END) AS AbnormalCount 
FROM Table t 
GROUP BY t.ID 
+1

Я думаю, что вы правильно и оптимально решали мою проблему (без вложенного запроса) :) – kez

+0

, если у меня есть требование показать определенный набор столбцов, если '(AbnormalCount> 0)' else уменьшить столбец, поэтому мой подход похож на этот http://imgur.com/a/Xtu7t Что делать? – kez

+0

Вы не можете заставить весь столбец исчезать без использования динамического SQL. –

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