2014-02-07 3 views
0

Мне нужна помощь.SQL CASE КОГДА, когда я хочу «включить» строку

Допустим, у меня есть таблица

ID Mark Transmition 
1 Ford A 
2 Ford A 
3 Ford M 
4 BMW M 
5 BMW M 
6 Ford A 

А теперь мне нужно сделать случай, когда.

CASE WHEN mark = 'Ford' then 'Ford' 
    WHEN mark = 'Ford' and Transmition = 'A' then ' including Fords with automatic transmitions' 

И я должен это сделать, используя случай когда, нет случай если есть. Так как мне нужно использовать его в отчете OBIEE.

В результате мне нужно что-то вроде этого:

Mark         Count 
Ford         4 
inc Ford with automatic transmition 3 

Но результаты оценки ИСТИНА в Bith случаев ...

С нетерпением ждем от вас.

+0

Так что вопрос? –

+0

это имеет значение TRUE, как время ... как-то мне нужно иметь строки, как это: Форд 4 включая бродов с автоматическим transmition 3 – andrepaal

ответ

1

Запрос:

SELECT CASE WHEN mark = 'Ford' THEN 'Ford' END AS Mark, 
COUNT(*) 
FROM Table1 t 
WHERE mark = 'Ford' 
GROUP BY mark 
UNION ALL 
SELECT CASE WHEN mark = 'Ford' AND Transmition = 'A' 
       THEN 'including Fords with automatic transmitions' END AS Mark, 
COUNT(*) 
FROM Table1 t 
WHERE mark = 'Ford' 
AND Transmition = 'A' 
GROUP BY CASE WHEN mark = 'Ford' AND Transmition = 'A' 
       THEN 'including Fords with automatic transmitions' END 

Результат:

|          MARK | COUNT(*) | 
|---------------------------------------------|----------| 
|          Ford |  4 | 
| including Fords with automatic transmitions |  3 | 
0

Не знаете, что вы думаете, но, похоже, вы стараетесь избегать null строк, указав case when против case when exists.

насчет

SELECT 
    ' including Fords with automatic transmitions' AS "DESCRIPTION", 
    COUNT("ID") AS "POCET" 
FROM some_table 
WHERE "Mark" = 'Ford' AND "Transmition" = 'A' 
GROUP BY "Mark" 

UNION ALL 

SELECT 
    "Mark", 
    COUNT("ID") AS "POCET" 
FROM some_table 
WHERE "Mark" = 'Ford' 
GROUP BY "Mark" 
+0

Сорри, я редактировал постановка вопроса немного, чтобы сделать его более ясным – andrepaal

+0

Обновленный ответ, потому что вопрос изменилось. –

0

Вы можете сделать это без CASE, как это:

SELECT Mark, count(1) FROM car GROUP By Mark 
UNION 
SELECT 'Including '||Mark||' with automatic transmitions' as MM, count(1) FROM car WHERE Transmition = 'A' GROUP By MM; 

Результат:

|          MARK | COUNT(*) | 
|---------------------------------------------|----------| 
|           BMW |  2 | 
|          Ford |  4 | 
| including Fords with automatic transmitions |  3 | 
0

Просто попробуйте этот

SELECT MARK,Count(1) AS Count FROM 
(
    SELECT CASE WHEN mark = 'Ford' and Transmition = 'A' then ' including Fords with automatic transmitions' 
      WHEN mark = 'Ford' and Transmition <> 'A' then 'Ford' 
      Else 'BMW' 
      END Mark 
    FROM Table1 
) AS T Group By T.Mark 

O/P:

MARK           COUNT 
including Fords with automatic transmitions  3 
BMW            2 
Ford           1 

FIDDLE DEMO

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