고수님들께 질문 드립니다. 0 5 1,127

by InsideCore [2014.08.01 11:11:16]


안녕하세요.

좀더 간단하게 쿼리를 작성하고 싶어 질문 드립니다.

1~6까지의 숫자가 있구요.

숫자별로 아래와 같이 보여주고자 합니다.

CASE 또는 UNION ALL로 하면 되겠지만, 

단순하게 할수 있는 방법이 없을까요??

도움 부탁 드립니다.

1 2 3 4 5 6
1 O X X X X X
4 O O O O X X
6 O O O O O O

 

by 우리집아찌 [2014.08.01 13:08:25]
-- case 문 쓰는거 나쁘지않은데요..
 SELECT LV 
      , CASE WHEN LV >= 1 THEN 'O' ELSE 'X' END "1"
      , CASE WHEN LV >= 2 THEN 'O' ELSE 'X' END "2"
      , CASE WHEN LV >= 3 THEN 'O' ELSE 'X' END "3"
      , CASE WHEN LV >= 4 THEN 'O' ELSE 'X' END "4"
      , CASE WHEN LV >= 5 THEN 'O' ELSE 'X' END "5"
      , CASE WHEN LV >= 6 THEN 'O' ELSE 'X' END "6"
  FROM 
 ( SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 6 )

 


by InsideCore [2014.08.01 13:49:00]

case문도 나쁘진 않지만, 

혹시 다른게 구현할 방법은 없는지 알아 볼려구요..


by 허승호 [2014.08.01 14:07:12]

case 문을 뺏어요

WITH RS AS (
SELECT LEVEL LV 
     , '1' AS A1
    , '2' AS A2
    , '3' AS A3
    , '4' AS A4
    , '5' AS A5
    , '6' AS A6
    FROM DUAL CONNECT BY LEVEL <= 6
)
SELECT  REPLACE(REGEXP_REPLACE(A1, '^[1-' || LV || ']$' , 'O'),'1','X') AS R1
    ,REPLACE(REGEXP_REPLACE(A2, '^[1-' || LV || ']$' , 'O'),'2','X') AS R2
    ,REPLACE(REGEXP_REPLACE(A3, '^[1-' || LV || ']$' , 'O'),'3','X') AS R3
    ,REPLACE(REGEXP_REPLACE(A4, '^[1-' || LV || ']$' , 'O'),'4','X') AS R4
    ,REPLACE(REGEXP_REPLACE(A5, '^[1-' || LV || ']$' , 'O'),'5','X') AS R5
    ,REPLACE(REGEXP_REPLACE(A6, '^[1-' || LV || ']$' , 'O'),'6','X') AS R6
 FROM RS WHERE LV IN ('1','4','6')


by 마농 [2014.08.01 14:48:23]

나쁘지 않을걸 굳이 다르게 구현하고자 한다면?
방법이야 정말 무수하게 많겠죠..
나쁜 걸 개선하는 질문을 하셨으면 답변달기 수월한데
 - 기존 방법의 비효율을 개선하는 방법을 제시하거나.
 - 기존 방법 보다 간결한 구문을 제시하거나.
나쁘지 않을 걸 다르게 구현하는 질문에는 답변 달기가 참 어렵네요.
 - 기존 방법에 비효율이 없으므로 개선할게 없는거죠.
 - 기존 방법의 구문도 복잡하지 않고 간결하여 이해도 쉽죠.
여러가지 실험적인 형태의 시도가 있어야 하겠죠.
 - 실험은 가능하나.. 기존 방법보다 나은점이 보이지 않으면 답변 달기 힘들어요.


by 마농 [2014.08.01 14:49:06]
SELECT no
     , SUBSTR(x, 1, 1) "1"
     , SUBSTR(x, 2, 1) "2"
     , SUBSTR(x, 3, 1) "3"
     , SUBSTR(x, 4, 1) "4"
     , SUBSTR(x, 5, 1) "5"
     , SUBSTR(x, 6, 1) "6"
  FROM (SELECT no
             , RPAD(RPAD('O', no, 'O'), 6, 'X') x
           --, SUBSTR('OOOOOOXXXXX', 7-no, 6) x
          FROM (SELECT LEVEL no FROM dual CONNECT BY LEVEL <= 6)
        )
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입