데이터를 제가 임의로 정한 데이터로 매핑시켜서 출력하고 싶습니다.. 0 6 1,793

by 권pro [2013.12.04 15:11:20]


K-14.jpg (5,389Bytes)
K-16.jpg (2,203Bytes)

체크 박스가 있습니다.
------------------------------------------------------------------------------------------------
v지점    v  Agent   □ 거래선    □ 발주처    □ 현장    □  기타(집지 등)
------------------------------------------------------------------------------------------------
위와 같이  Check 되어져 있다면
컬럼에 저장은  (0,1)   이 됩니다. 다시 말해서 앞에서 부터 
지점   -> 0
Agent ->1
걸선   -> 2
 ...
..
기타(집지 등)  - >5


이렇게 저장 되는것이죠.
-------------------------------------------------------------------------------------------------------
알고 싶은것은 저장 되어있는 숫자를 다시 옆에 명칭으로 바꾸고 싶어요.

이걸 다시 뽑을 때 어떻게 쿼리상에서 뽑아야 할지 모르겠네요.. 직접 지정해서 넣고 싶거든요.
안에 0,1을 검색해서  (지점, Agent) 이렇게 다시 출력 하고 싶습니다.
INSTR를 써서 숫자를 자를수는 있겠는데 다음 어떤식으로 해야할지를 잘 모르겠네요..
도움좀 부탁드릴께요.

by feelie [2013.12.04 15:27:42]

내용을 정확히 파악을 할수 없어  쿼리는 고수님들이 작성을 해주실것 같습니다.

다만
현재 모델의 상태를 보면 1차 정규화(하나의 컬럼은 하나의 값을 가진다)에 위배되는 모델형태입니다.

당장은 쿼리로 요건을 만족할수 있겠지만,
앞으로 많은 문제가 생길수 있는 모델 형태입니다.

쿼리를 생각하기 전에 정규화를 통한 모델을 먼저 진행하심이 우선일것 같습니다.

by 권pro [2013.12.04 15:41:41]

SELECT B.TEST0||','||B.TEST1||','||B.TEST2||','||B.TEST3 AS TEST_RESULT FROM
(
SELECT
    DECODE(INSTR(','||TEST||',', ',0,'),0,'' , '테스트1') AS TEST0,
    DECODE(INSTR(','||TEST||',', ',1,'),0,'' , '테스트2') AS TEST1,
    DECODE(INSTR(','||TEST||',', ',2,'),0,'' , '테스트3') AS TEST2,
    DECODE(INSTR(','||TEST||',', ',3,'),0,'' , '테스트4') AS TEST3
  FROM T
) B

이런식으로 하면  합쳐지게 나올수 있는데 콤마( ,) 때문에 걸리네요.
CASE문을 써야할까요??

by 홍상표 [2013.12.04 15:51:29]
--좀 무식한 방법 같지만..
WITH T AS ( 
  select '1,0' aa from dual union all
  select '4,1,0' aa from dual union all
  select '4,3,1,0' aa from dual 
) 
SELECT replace(replace(replace(replace(replace(replace(aa,'0','지점'),'1','Agent'),'2','거래선'),'3','발주처'),'4','현장'),'5','기타') kk
from T

by 권pro [2013.12.04 16:15:24]

어떻게 하든 무식하게 나올수 밖에 없어서..;
공통코드를  가지고 있는것도 아니고~ 이런식으로 원하고 한게 맞네요~^^
감사합니다.
좋은 하루 되세요~!


by sdalf [2013.12.04 16:30:33]
WITH T AS (
    SELECT 0 code,'지점' names FROM dual UNION ALL
    SELECT 1 code,'Agent' names FROM dual UNION ALL
    SELECT 2 code,'거래선' names FROM dual UNION ALL
    SELECT 3 code,'발주처' names FROM dual UNION ALL
    SELECT 4 code,'현장' names FROM dual UNION ALL
    SELECT 5 code,'기타(잡지등)' names FROM dual
)
SELECT 
col_val
,(SELECT listagg(names,',') WITHIN GROUP(ORDER BY code) FROM T WHERE instr(A.col_val,code) > 0) result
FROM
(
        SELECT '0,1' col_val FROM dual UNION ALL
        SELECT '0,1,3,5' col_val FROM dual UNION ALL
        SELECT '2,4,5' col_val FROM dual UNION ALL
        SELECT '5' col_val FROM dual 
) A

단 코드가 0~9까지만 유효. 코드가 2자리가 넘어갈듯하면..

WITH T AS (
    SELECT 0 code,'지점' names FROM dual UNION ALL
    SELECT 1 code,'Agent' names FROM dual UNION ALL
    SELECT 2 code,'거래선' names FROM dual UNION ALL
    SELECT 3 code,'발주처' names FROM dual UNION ALL
    SELECT 4 code,'현장' names FROM dual UNION ALL
    SELECT 5 code,'기타(잡지등)' names FROM dual UNION ALL
    SELECT 6 code,'aa' names FROM dual UNION ALL
    SELECT 7 code,'bb' names FROM dual UNION ALL
    SELECT 8 code,'cc' names FROM dual UNION ALL
    SELECT 9 code,'dd' names FROM dual UNION ALL
    SELECT 10 code,'ee' names FROM dual UNION ALL
    SELECT 11 code,'ff' names FROM dual
)
SELECT 
col_val
,(SELECT listagg(names,',') WITHIN GROUP(ORDER BY code) FROM T WHERE instr(','||A.col_val||',',','||code||',') > 0) result
FROM
(
        SELECT '0,1' col_val FROM dual UNION ALL
        SELECT '0,1,3,5' col_val FROM dual UNION ALL
        SELECT '2,4,5' col_val FROM dual UNION ALL
        SELECT '5' col_val FROM dual UNION ALL 
        SELECT '10,11' col_val FROM dual  UNION ALL
        SELECT '0,1,10' col_val FROM dual 
) A



by 우리집아찌 [2013.12.04 16:50:48]

좋은 방법입니다..

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