[조인질문] 3개 테이블 약간 조건 들어간 리스트 쿼리 질문 드립니다 0 15 2,402

by nayha [SQLServer] [2013.12.30 16:24:05]


조인 질문 

테이블 3개 
나와야 하는 결과는 

내가 입찰한 채권들 

채권번호 / 채권 금액 / 채권 건수 / 의뢰자 / 즉시매매가 / 현재 경매가 / 나의 입찰가 

1개 채권당 하나만 입찰경과가 보여야 한다. 

(2개 채권 입찰했으면 리스트에는 2개 입찰한 내역이 보여야 한다 
여러번 채권 입찰은 가능하나 
내 입찰가중 제일 높은것 1개만 노출 되어야 한다. 


아래 3개 테이블 속성 입니다. 

경매 Table 
경매번호 
즉시매매가 
현재경매가 
채권번호 
상태 
등록일 
등록ID 


채권 Table 
채권번호 
채권건수 
채권금액 
상태 
등록자(의뢰자)


입찰 Table 
입찰번호 
경매번호 
입찰 가격(나의입찰가) 
입찰한 ID 
채권번호 
경매상태 
등록일 


입찰 테이블에서 입철번호 나 경매번호 group 으로 가져와서 해볼려고 
하는데 잘 안되네요 접근 방법이 잘못된건가요??
by 빈이 [2013.12.30 16:44:17]

SELECT * FROM (
SELECT A.*
    ROW_NUMBER() OVER(PARTITION  채권번호 ORDER BY 입찰가격 DESC) AS RN
FROM 입찰테이블 A
) K,  채권테이블 O, 경매테이블 P
WHERE K.RN = 1
AND K.채권번호 = O.채권번호
AND K.경매번호 = P.경매번호

대략 이런 식으로 하시면 될거 같은데요....
데이터 샘플이나 그에 따른 결과값 이런 것들이 없으니 답변을 하기가 힘듭니다.

정확한 답변을 원하시면 질문을 좀 상세하게 하셔야 할 것 같네요.

by nayha [2013.12.30 17:06:30]
넵 방금 알려주신걸로 해보았습니다. 

데이터가 1건만 나오네요 

제가 원하는건 

1 개 채권에는 여러건 입찰은 가능하나 1개만 노출 되는거였구요

다시 다른 채권에 입찰하면 그 채권에 관해서도 1개만 노출 되는 데이타를 원했습니다.

주신 쿼리를 돌려보니 

입찰 데이타  상위 1개만 가져와서 
2개 테이블에 조인하는 상황인거죠? 

정리가 참 힘드네요 데이타를 정리해서 다시 올리겠습니다.

답변 정말 감사합니다 

by nayha [2013.12.30 17:18:00]
실제 데이타 인데 요렇게 정리하면 될까요???

경매 Table
경매번호/즉시경매가/현재경매가/채권번호/경매등록일
131224104455/15,000,000/70,000/131224-100001/2013-12-24
131226142027/25,000,000/80,600/131224-500002/2013-12-24
채권 Table
채권번호/건수/채권금액/채권등록자/등록일
131224-100001/706/5200/채권등록자/2013-12-24
131224-500002/70/2400/채권등록자/2013-12-24
입찰 Table
입찰번호/경매번호/입찰가격/입찰ID/채권번호/등록일
1/131224104455/60000/입찰ID/131224-100001/2013-12-24
2/131226142027/50600/입찰ID/131224-500002/2013-12-30
3/131224104455/70000/입찰ID2/131224-100001/2013-12-24
4/131226142027/80600/입찰ID2/131224-500002/2013-12-30
5/131224104455/65000/입찰ID/131224-100001/2013-12-24
6/131224104455/70000/입찰ID/131224-100001/2013-12-24

by 마농 [2013.12.30 17:23:27]
하나의 채권에 대해 경매가 하나만 연결된다고 보장할 수 없들 듯 하네요.
즉 채권번호 기준이 아닌 경매번호 기준으로 나와야 된다고 생각됩니다.
만약 채권번호 기준으로 나와야 한다면 경매 또한 최종경매만 나와야 하겠지요.

by nayha [2013.12.30 17:28:58]
마농님 답변 감사합니다.

1개 채권에 1개의 경매만 등록할 수 있습니다. 
소스로 막혀 있습니다.

by 마농 [2013.12.30 18:19:57]
음..경매가 낙찰되지 않고 유찰되는 경우는 절대로 없는 모양이군요?
경매가 유찰되면 2차 경매, 3차 경매 하지 않나요?

by nayha [2013.12.30 17:26:03]
입찰 테이블에서 경매번호를 중복제거 해서 하면 될까요?

by 빈이 [2013.12.30 17:32:55]


PARTITION 채권번호 이 구문이 채권번호 별로 가격을 정렬하는 것이니
채권번호 별로 나올텐데요~_~?

by nayha [2013.12.30 17:42:52]
아 mssql 이라서 안되나 보네요 partition 옵션 검색해 보겠습니다.

by 빈이 [2013.12.30 17:42:53]
이렇게 하신거 맞나요?


WITH A --경매 Table
AS (
--경매번호(A,C)/즉시경매가/현재경매가/채권번호(A, B, C)/경매등록일
SELECT '131224104455' AS RUD_NUM, '15000000' AS WMR_PR, '70000' AS GUS_PR, '131224-100001' AS CO_NUM, '2013-12-24' AS C_DT FROM DUAL UNION ALL
SELECT '131226142027', '25000000', '80600' , '131224-500002', '2013-12-24' FROM DUAL
), B -- 채권 Table
 AS (
--채권번호(A, B, C)/건수/채권금액/채권등록자/등록일
SELECT '131224-100001' AS CO_NUM,'706' AS CNT , '5200' CO_PR, '채권등록자' AS CREATOR, '2013-12-24' AS C_DT FROM DUAL UNION ALL
SELECT '131224-500002', '70', '2400' , '채권등록자', '2013-12-24' FROM DUAL
), C --입찰 Table
AS
(
--입찰번호/경매번호(A,C)/입찰가격/입찰ID/채권번호(A,B,C)/등록일
SELECT '1' AS DLQ_NUM,'131224104455' AS RUD_NUM,'60000' AS DLQ_PR,'입찰ID' AS DLQ_ID,'131224-100001' AS CO_NUM,'2013-12-24' AS D_CR FROM DUAL UNION ALL
SELECT '2','131226142027','50600','입찰ID','131224-500002','2013-12-30' FROM DUAL UNION ALL
SELECT '3','131224104455','70000','입찰ID2','131224-100001','2013-12-24' FROM DUAL UNION ALL
SELECT '4','131226142027','80600','입찰ID2','131224-500002','2013-12-30' FROM DUAL UNION ALL
SELECT '5','131224104455','65000','입찰ID','131224-100001','2013-12-24' FROM DUAL UNION ALL
SELECT '6','131224104455','70000','입찰ID','131224-100001','2013-12-24' FROM DUAL
)
SELECT * FROM (
SELECT * FROM (
SELECT CC.*
    , ROW_NUMBER() OVER(PARTITION BY CC.CO_NUM ORDER BY CC.DLQ_PR) RN
FROM C CC
) WHERE RN = 1
) K, A AA, B BB
WHERE 1=1
AND K.CO_NUM = AA.CO_NUM
AND K.CO_NUM = BB.CO_NUM
AND K.RUD_NUM = AA.RUD_NUM ;



by 빈이 [2013.12.30 17:43:52]

음 mssql 은 제가 잘 몰라서 -_-;;
mssql 전문가분의 답변을...

by nayha [2013.12.30 17:50:32]
빈이님 완전 감사합니다..  ^^

제가 검색을 제대로 안해봐서요 ;; PARTITION  뒤에 BY 를 빼먹었요 ;;

SELECT * FROM (
SELECT A.*
    ,ROW_NUMBER() OVER(PARTITION BY  채권번호 ORDER BY 입찰가격 DESC) AS RN
FROM 입찰테이블 A
) K,  채권테이블 O, 경매테이블 P
WHERE K.RN = 1
AND K.채권번호 = O.채권번호
AND K.경매번호 = P.경매번호

요렇게 하니까 정상적으로 2건 나오네요 
오늘은 PARTITION BY  검색해보고 이해하고 집에 가야겠어요 ~

by 빈이 [2013.12.30 17:54:00]

아... 그.... by 는 첫 답변에 제가 빼먹은거라서.......;;;
실행해보고 오류나면 찾는편이라.....
하;하;하;하; ㅌㅌㅌ

by 빈이 [2013.12.30 17:55:15]

아 그리고 경매테이블이랑 입찰테이블의 채권번호 조인조건도 추가하셔야 할 거 같습니다

by nayha [2013.12.31 16:37:41]
빈이님 감사합니다 덕분에 잘 해결했습니다 ^______________^

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