Oracle wm_concat获取一行然后Case检查值

时间:2012-07-12 13:25:43

标签: oracle oracle10g

我只想按画家或不是画家排序。

Oracle 10g

示例数据:

工作类型

  • 做饭
  • 画家
  • 程序员
  • mailman
  • 接待员
  • homemaker
  • 父亲

一个人可以为每种工作类型分配一行,但他们可以有多个工作。

SELECT   ...(LIST OF FIELDS)...,
         WM_CONCAT(job_type) AS myJob_Type
FROM     (MYTABLE)
GROUP BY ...(LIST OF FIELDS)...

这给了我逗号分隔列表中myJob_Type中的所有job_type。 这很有效。

现在我想要一种方法,当作业有' Painter'时,我可以通过myJob_Type进行排序。在里面。我不关心任何其他工作类型。所以我的想法是假设如果Painter在myJob_Type中,但是当我确实让它工作时我会再次获得muiltple。

SELECT ...(LIST OF FIELDS)...,
WM_CONCAT(job_type) AS myJob_Type,
CASE WHEN(job_ype like '%Painter%') THEN '1'
ELSE '0'
END

FROM     (MYTABLE)
GROUP BY ...(LIST OF FIELDS)...,
         job_ype

尝试了另一种选择。

SELECT ...(LIST OF FIELDS)...,
WM_CONCAT(job_type) AS myJob_Type,

CASE WHEN(myJobType like '%Painter%') THEN '1'
ELSE '0'
END

FROM      (MYTABLE)
GROUP BY  ...(LIST OF FIELDS)...,
          myJobType 

任何建议。

1 个答案:

答案 0 :(得分:1)

你可以尝试:

select   ...
         wm_concat(job_type) as myJob_Type,
         sum(decode(job_type,'Painter',1,0))
from     ...
group by ...