SQL CASE WHEN,当我想要"包括"行

时间:2014-02-07 08:08:34

标签: sql case obiee

我需要一些帮助。

让我说我有一张桌子

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

但结果在案例中评估为TRUE ......

期待您的回音。

4 个答案:

答案 0 :(得分: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 |

答案 1 :(得分:0)

不确定您的问题,但似乎您试图通过指出null vs 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"

答案 2 :(得分: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 |

答案 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