SELECT a.Id, ISNULL(b.Name, '/') AS name, b.Sex, b.Organ, a.JoinDate, a.CancleDate, 
CASE b.sex WHEN '1' THEN '男' WHEN '2' THEN '女' WHEN '3' THEN '不详' WHEN '0'
THEN '不详' END AS sexs, 
(
CASE
(SELECT top 1
(case  CensorType
when 56 then
case CensorResult 
when 0 then '0' 
when 1 then '1' 
else '0'
end                
when 55 then
case CensorResult
when 0 then '2' 
when 1 then '3'
else '2'
end
end) as result
FROM censor
WHERE (CensorType = 56 or  CensorType = 55 )  AND IdentifyID = a.id order by CensorType desc

WHEN '2' THEN '建立审批中' 
WHEN '3' THEN '已建立' 
WHEN '0' THEN '撤销审批中' 
WHEN '1' THEN '已撤销' 
else '建立审批中'
END)
AS state
FROM CaseRelate a LEFT OUTER JOIN
CaseRelateMan b ON a.Id = b.Crid order by name我在Sql Server里是这样写,但现在要转成Oracle,我不会转中间的case 这段,有哪些高手来帮帮忙,先在此谢过

解决方案 »

  1.   

    不是case的不同
    是select top的不同
    楼主去找一下oracle的select top写法就知道了
      

  2.   

    SELECT a.Id,
           ISNULL(b.Name, '/') AS NAME,
           b.Sex,
           b.Organ,
           a.JoinDate,
           a.CancleDate,
           CASE b.sex
             WHEN '1' THEN
              '男'
             WHEN '2' THEN
              '女'
             WHEN '3' THEN
              '不详'
             WHEN '0' THEN
              '不详'
           END AS sexs,
           (CASE (SELECT RESULT
                FROM (SELECT (CASE CensorType
                               WHEN 56 THEN
                                CASE CensorResult
                                  WHEN 0 THEN
                                   '0'
                                  WHEN 1 THEN
                                   '1'
                                  ELSE
                                   '0'
                                END
                               WHEN 55 THEN
                                CASE CensorResult
                                  WHEN 0 THEN
                                   '2'
                                  WHEN 1 THEN
                                   '3'
                                  ELSE
                                   '2'
                                END
                             END) AS RESULT
                        FROM censor
                       WHERE (CensorType = 56 OR CensorType = 55) AND
                             IdentifyID = a.id
                       ORDER BY CensorType DESC)
               WHERE rownum < 2)
             WHEN '2' THEN
              '建立审批中'
             WHEN '3' THEN
              '已建立'
             WHEN '0' THEN
              '撤销审批中'
             WHEN '1' THEN
              '已撤销'
             ELSE
              '建立审批中'
           END) AS state
      FROM CaseRelate a
      LEFT OUTER JOIN CaseRelateMan b
        ON a.Id = b.Crid
     ORDER BY NAME
      

  3.   

    这样不行的吧
    我现在用函数暂时实现
    主要是Oracle里case后面的变量这样不行的
      

  4.   

    oracle 的CASE WHEN 支持嵌套查询啊,怎么不行?