2013-02-05 2 views
0

Проблема: как я могу группировать таблицу с помощью оператора case.Группировка элементов с использованием оператора case

например, у меня есть две таблицы.

первая таблица

Имя ID
1 а
2 б

второй стол

Status ID
1 красный
1 красный
1 синий
1 красный

вот сценарий:

  • Я оставил присоединиться идентификатор таблицы 1 и таблицы 2.
  • Если он имеет тот же идентификатор, то это создаст случай заявление ,

    1. Если все состояния содержит красный на столе 2, то [состояние]
    2. если статус содержит красный и синий кнопку [Condtion]
    3. если не по делу, то [Condtion]

как я могу это создать?

+1

Вы можете привести примеры своего состояния? –

+1

Что такое РСУБД? –

ответ

1

Для общего подхода через наиболее/все СУБД, то вы можете использовать это:

SELECT t.ID, 
     t.Name, 
     CASE WHEN t.Red = t.Total THEN 'Only Red condition' 
      WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition' 
      ELSE 'Other condition' 
     END AS CaseCondition 
FROM ( SELECT Table1.ID, 
        Table1.Name, 
        COUNT(CASE WHEN Table2.Status = 'Red' THEN 1 END) AS Red, 
        COUNT(CASE WHEN Table2.Status = 'Blue' THEN 1 END) AS Blue, 
        COUNT(Table2.Status) AS Total 
      FROM Table1 
        LEFT JOIN Table2 
         ON Table1.ID = Table2.ID 
      GROUP BY Table1.ID, Table1.Name 
     ) t 

Если СУБД поддерживает PIVOT (и единственными возможными значениями являются красный и синий), то вы можете использовать что-то вроде:

SELECT ID, 
     Name 
     CASE WHEN pvt.Red > 0 AND pvt.Blue = 0 THEN 'Only Red condition' 
      WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition' 
      ELSE 'Other condition' 
     END AS CaseCondition 
FROM Table1 
     LEFT JOIN Table2 
      ON Table1.ID = Table2.ID 
     PIVOT 
     ( COUNT(Table2.ID) 
      FOR Table2.Status IN ([Red], [Blue]) 
     ) pvt 
Смежные вопросы