日期:2014-05-16  浏览次数:20669 次

高分求解~~
数据表内容为:
no sub_no sign  
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
9 2
10 1
10 2
10 3
10 4
11 1
11 2
11 3
12 1
13 1
13 2
14 1
14 2

要求: 当主ID下只有一条记录时, sign 显示为 空
  当主ID下有多条子ID时, 最小的子ID 的sign 显示为 "┓"
  最大的子ID 的sign 显示为 "┛"
  中间的子ID 的sign 显示为 "┃"
  一句SQL。。。高分求解~ 




------解决方案--------------------
select no,sub_no ,(case
when cntid = 1 then
' '
else
(case sub_no
when maxid then
'┛'
when minid then
'┓'
else
'|'
end)
end)
from (select no,
sub_no,
max(sub_no) over(partition by no) maxid,
min(sub_no) over(partition by no) minid,
count(sub_no) over(partition by no) cntid
from t)
------解决方案--------------------
楼主是在作医嘱打印吗?

SQL code

SELECT NO,
    SUB_NO,
    CASE WHEN NO = F AND NO = L THEN '┃'
         WHEN NO = F AND NO <> L THEN '┛'
         WHEN NO <> F AND NO = L THEN '┓'
         ELSE ''
    END SIGN
FROM
  (SELECT NO,
  SUB_NO,
  NVL(LAG(NO,1)OVER(ORDER BY PATIENT_ID,VISIT_ID,NO,SUB_NO),0) F,
  NVL(LEAD(NO,1)OVER(ORDER BY PATIENT_ID,VISIT_ID,NO,SUB_NO),0) L
  FROM TABLE );