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



我只想按Painter或非Painter排序。

Oracle 10g

示例数据:

作业类型

  • 厨师
  • 油漆工
  • 程序员
  • 邮差
  • 接待员
  • 家庭主妇
  • 父亲
  • 母亲
  • 等等

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

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中,但当我让它工作时,我会再次得到多条线。

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 

任何建议。

您可以尝试:

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

相关内容

最新更新