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 6821 게시물 읽기
No. 6821
자식 로우 찾기 쿼리?
작성자
우세연(w2share)
작성일
2014-06-06 11:26ⓒ
2014-06-06 11:28ⓜ
조회수
7,373

아래처럼 테이블이 있는데요

id

날짜 (D)

타입

(Type) 

계좌

(ACCT)

금액

(AMT)

일렬

(SEQ)

영수증

(REC)

1 6/5/2014 C 1234 100 1  
2 6/5/2014   3333 20 2 103
3 6/5/2014   4444 30 3 301
4 6/5/2014   5555 50 4 999
5 6/5/2014 C 1234 200 1  
6 6/5/2014   6666 100 2 332
7 6/5/2014   7777 50 3 782
8 6/5/2014   8888 50 4 787
9 6/5/2014 C 5678 1000 1  
10 6/5/2014   5757 1000 2 1001
11 6/6/2014 C 5678 2000 1  
12 6/6/2014   4444 300 2 200
13 6/7/2014 C 1234 1000 1  
14 6/7/2014   4848 1000 2 101

type 에 C가 있는 로우는 부모 로우 이고요.

그 아래로 타입에 C 가 없는 로우들은 바로 위에 C 를 가진 부모 로우에 대한 자식 로우 들입니다. 자식로우들의 금액을 다 합치면 부모로우의 금액과 같고요..

다음 C 있는 로우가 나오면 다시 부모 로우이고요. 부모 로우는 영수증 (REC) 가 없고 자식 로우는 영수증 (REC) 이 있습니다.

어느 특정 로우에 대한 자식 로우들을 뽑아내려면 어떻게 해야 하나요?

예를 들어 6월 5일날 계좌번호 1234 에 200원을 입금하는데 사용된 건수들 (id 6~8) 만을 얻으려고 하면 어떻게 쿼리 해야 하나요? 

 

 

 

이 글에 대한 댓글이 총 3건 있습니다.
-- 뭐 걍 대충하면 
WITH tbl ( id, D, tType, ACCT, AMT, SEQ, REC )
AS
(
SELECT 1, '6/5/2014', 'C', 1234, 100,1, NULL
UNION ALL SELECT 2, '6/5/2014', ' ', 3333, 20 ,2, 103
UNION ALL SELECT 3, '6/5/2014', ' ', 4444, 30 ,3, 301
UNION ALL SELECT 4, '6/5/2014', ' ', 5555, 50 ,4, 999
UNION ALL SELECT 5, '6/5/2014', 'C', 1234, 200,1,  NULL
UNION ALL SELECT 6, '6/5/2014', ' ', 6666, 100,2, 332
UNION ALL SELECT 7, '6/5/2014', ' ', 7777, 50 ,3, 782
UNION ALL SELECT 8, '6/5/2014', ' ', 8888, 50 ,4, 787
UNION ALL SELECT 9, '6/5/2014', 'C', 5678, 1000, 1,  NULL
UNION ALL SELECT 10, '6/5/2014', ' ', 5757, 1000, 2, 1001
UNION ALL SELECT 11, '6/6/2014', 'C', 5678, 2000, 1,  NULL
UNION ALL SELECT 12, '6/6/2014', ' ', 4444, 300, 2, 200
UNION ALL SELECT 13, '6/7/2014', 'C', 1234, 1000, 1,  NULL
UNION ALL SELECT 14, '6/7/2014', ' ', 4848, 1000, 2, 101
)
, tid( id )
AS
(
SELECT TOP (1) id
FROM tbl
WHERE d = '6/5/2014' and amt = 200 AND tType = 'C'
)
SELECT *
FROM tbl
INNER JOIN tid ON tbl.id > tid.id
INNER JOIN ( SELECT ISNULL( MIN( id ), (SELECT MAX(id) + 1 FROM tbl) ) AS minid FROM tbl WHERE id > (SELECT id FROM tid ) AND tType = 'C' ) AS t2 ON tbl.id < t2.minid
;
--문제는 테이블이 정규화 되어 있지 않은 것이 더 심각한 문제겠네요.. -_-;;
우욱님이 2014-06-08 14:06에 작성한 댓글입니다. Edit

 우욱님은 아무리봐도 천재이셔요...

우세연(w2share)님이 2014-06-10 14:54에 작성한 댓글입니다.

-- 그럴리가 있겠습니까...
-- 걍 취미생활을 열심히 하능... 

우욱님이 2014-06-10 15:18에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6824[질문] 프로시져 sql management studio 실행과 웹 실행의 차이? [3]
조성배
2014-06-18
7729
6823트리거 쿼리 간략하게 정리
트리거
2014-06-16
7122
6822SP실행시 인자값에 따라서 select구문에 if을 사용하고 십습니다. [4]
선이
2014-06-11
8242
6821자식 로우 찾기 쿼리? [3]
우세연
2014-06-06
7373
6820주기적으로 속도 느림 [1]
이경미
2014-06-05
7929
6819DB 커넥션 실패.. 질문드립니다. [2]
최뭉뭉
2014-06-02
7341
6817데이타 가로 출력 문의 [4]
아바아바
2014-05-27
8057
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다