database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7030 게시물 읽기
No. 7030
마농님.. 죄송하지만. 질문 하나 더 있어요..ㅜㅜ
작성자
도와주세요..
작성일
2017-02-01 14:59
조회수
3,113

마농님...

 

완전 짱이십니다. ^^..

염치 없게도 마지막 퍼즐에 한가지 더 문의 사항이 있어요...

바쁘시겠지만.. 확인 부탁 드릴게요....ㅜㅜ

 

컬럼이

 

a b

1 code1

2 code2

3 code3

4 code4

5 code5

6 code6

 

이 상태에서 만약 a 컬럼의 1 다음 데이터가 4가 나오면 code7 이라는 놈으로 desc를 출력하려고 합니다.(테이블에는 없지만....)

case when 문 쓰면 될 거 같은데.. 미치 겠네요...

프로그램 로직으로 해결 해야 되나 싶기도 하고요..

염치 없지만 한번더 도움 부탁 드립니다.

감사합니다.

이 글에 대한 댓글이 총 8건 있습니다.

질문하실 때 질문하는 사람 입장이 아닌
질문 받는 사람 입장에서 질문해 주셔야 합니다.
뭔 말인지 모르겠네요.


만약 이라는 표현 대신 실제 데이터를 보여주세요.
그에 따른 결과표도 보여주세요.
조건에 따라 결과물이 달라져야 한다면?
원본 대비 결과표도 조건별로 필요하겠네요.

마농(manon94)님이 2017-02-01 18:32에 작성한 댓글입니다.
이 댓글은 2017-02-01 18:53에 마지막으로 수정되었습니다.

마농님.. 도움 진심으로 감사 드립니다.

제가 질문을 잘못 드렸네요.. ㅜㅜ 죄송합니다.

데이터가 좀 민감한 거라.. 제가 실수했네요..

 

제조 공정에 관련된 것입니다.

 

seq proc_seq proc_desc

1 2 a 투입

2 2 a 투입

3 3 b 투입

4 2 a 투입

5 5 c 교반

6 6 d 투입

 

이럴때... seq 4의 a 투입 다음에 나오는 proc_seq 5 의 c 교반의 경우 desc 를 c-1 교반으로 표현해야 합니다. 그런데..seq 1,2 의 proc_Seq 2 다음은 b 투입이므로 c-1 교반을 사용하면 않되고..seq 4의 proc_seq 2 번의 a 투입 다음에 proc_seq 5에 c 교반이 나왔으므로 c-2 교반으로 표현되어야 합니다. 즉 한 공정에 이런 패턴이 반복됩니다.

 

제가 질문을 하고도 헛갈리기는 하지만.. 이런 공정이 많아서.. 샘플 하나만 보여 주시면.. 다른 케이스에서도 적용 가능할 거 같아서요..

질문이 서툴고.. 죄송해요.. 도와 주시려고 하는데요..

이렇게 다시 질문 드려도 될지요?

항상 도움 주셔서 감사합니다.

도와주세요..님이 2017-02-02 09:13에 작성한 댓글입니다.
이 댓글은 2017-02-02 09:18에 마지막으로 수정되었습니다. Edit

예시 데이터와 설명이 서로 전혀 맞지 않습니다.
설명에 맞는 예시데이터와 그에 따른 결과 데이터를 함께 보여주세요.
설명도 구구절절하게 반복해서 설명 하실 필요 없이 간단 명료하게 해주세요.
 

마농(manon94)님이 2017-02-02 09:23에 작성한 댓글입니다.

넵.. 그럼 데이터와 결과 만으로 .. 죄송해요...

proc_seq proc_desc

 

2 a 투입

 

2 a 투입

 

3 b 투입

 

2 a 투입

 

5 c 교반

 

6 d 투입

 

select proc_seq,

case when proc_seq =2 and 다음 공정 = 5 then 'c 특별교반' else proc_desc end

from table

 

결과

proc_no proc_desc

2 a 투입

 

2 a 투입

 

3 b 투입 --proc_no =2 이나 proc_no=5 가 아니므로

 

2 a 투입

 

5 c 특별교반 -- proc_no =2 다음 공정 proc_no=5 가 나옴

 

6 d 투입

 

위 쿼리에서 case 문에 다음 공정 이라는 표현을 어떻게 해야 하는지가 key 입니다.

 

귀찮으실텐데.. 관심 감사합니다.

도와주세요..님이 2017-02-02 09:42에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT 1 seq, 2 proc_seq, 'a 투입' proc_desc
UNION ALL SELECT 2, 2, 'a 투입'
UNION ALL SELECT 3, 3, 'b 투입'
UNION ALL SELECT 4, 2, 'a 투입'
UNION ALL SELECT 5, 5, 'c 교반'
UNION ALL SELECT 6, 6, 'd 투입'
)
SELECT seq
     , proc_seq
     , proc_desc
     , CASE WHEN proc_seq = 5
             AND LAG(proc_seq) OVER(ORDER BY seq) = 2
            THEN 'c 특별교반'
            ELSE proc_desc
        END proc_desc_new
  FROM t
 ORDER BY seq
;

마농(manon94)님이 2017-02-02 09:59에 작성한 댓글입니다.
이 댓글은 2017-02-02 10:00에 마지막으로 수정되었습니다.

마농님.. 명쾌한 해석 감사 드립니다. ㅜㅜ

 

그런데.. 이 서버는 2008이라 LAG 함수를 못쓴다고 하네요..ㅜㅜ

다른 방법 찾아 봐야 할 거 같습니다.

 

바쁘신 가운데.. 도움 감사합니다.

도와주세요..님이 2017-02-02 10:37에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT 1 seq, 2 proc_seq, 'a 투입' proc_desc
UNION ALL SELECT 2, 2, 'a 투입'
UNION ALL SELECT 3, 3, 'b 투입'
UNION ALL SELECT 4, 2, 'a 투입'
UNION ALL SELECT 5, 5, 'c 교반'
UNION ALL SELECT 6, 6, 'd 투입'
)
SELECT a.seq
     , a.proc_seq
     , a.proc_desc
     , CASE WHEN b.proc_seq = 2
             AND a.proc_seq = 5
            THEN 'c 특별교반'
            ELSE a.proc_desc
        END proc_desc_new
  FROM t a
  LEFT OUTER JOIN t b
    ON b.seq = (SELECT MAX(seq) FROM t WHERE seq < a.seq)
 ORDER BY a.seq
;

마농(manon94)님이 2017-02-02 10:52에 작성한 댓글입니다.

마농님..

 

진짜 감사 드립니다. 제가 원하는 답입니다.

매번 정말 감사드립니다.

항상 건승하세요... ^^

도와주세요..님이 2017-02-02 11:28에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7033백업시 오류
김승태
2017-02-13
2835
7032초보입니다. 프로시저 생성은 되는데 웹에서 실행하면 오류가 납니다. [1]
최종철
2017-02-09
2842
7031확장저장프로시저에 관한 질문입니다.
코우지
2017-02-09
2806
7030마농님.. 죄송하지만. 질문 하나 더 있어요..ㅜㅜ [8]
도와주세요..
2017-02-01
3113
7029마농님.. 죄송한데요.. 다시 도움 요청 드려요...ㅜㅜ [4]
도와주세요...
2017-01-31
3141
7028실시간 현재고를 나타내는 테이블같은 db 설계시 궁금한점이 있습니다. [1]
안녕하세요
2017-01-31
3572
7027sql 시간 차이 계산 [2]
도와주세요..
2017-01-31
3216
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다