tbl
id |
acct |
tType |
amount |
D |
1 |
1111 |
c |
200 |
6/1/2014 |
2 |
2121 |
|
100 |
6/1/2014 |
3 |
3131 |
|
100 |
6/1/2014 |
4 |
2222 |
c |
250 |
6/2/2014 |
5 |
3131 |
|
100 |
6/2/2014 |
6 |
2121 |
|
100 |
6/2/2014 |
7 |
4141 |
|
50 |
6/2/2014 |
8 |
1111 |
c |
350 |
6/3/2014 |
9 |
5151 |
|
150 |
6/3/2014 |
10 |
6161 |
|
200 |
6/3/2014 |
11 |
3333 |
c |
400 |
6/3/2014 |
12 |
2121 |
|
200 |
6/3/2014 |
13 |
3131 |
|
200 |
6/3/2014 |
14 |
1111 |
c |
500 |
6/5/2014 |
15 |
4141 |
|
100 |
6/5/2014 |
16 |
5151 |
|
200 |
6/5/2014 |
17 |
6161 |
|
200 |
6/5/2014 |
18 |
2222 |
c |
400 |
6/5/2014 |
19 |
4141 |
|
400 |
6/5/2014 |
C 에 'c' 가 있는 로우들은 입금표고 그 다음 c 가 없는 로우들은 입금에 대한 하위목록입니다.
전에 우욱님께서 답변해 주신 대로 해봤더니 각각의 c 로우에 대한 하위목록이 잘 나오네요.
예를들어 id 14번에 대한 하위목록을 뽑을때
WITH tbl (id, ACCT, tType, AMT, D)
AS
(
SELECT 1, 1111, 'c', 200, '6/1/2014'
UNION ALL SELECT 2, 2121, ' ', 100, '6/1/2014'
UNION ALL SELECT 3, 3131, ' ', 100, '6/1/2014'
UNION ALL SELECT 4, 2222, 'c', 250, '6/2/2014'
UNION ALL SELECT 5, 3131, ' ', 100, '6/2/2014'
UNION ALL SELECT 6, 2121, ' ', 100, '6/2/2014'
UNION ALL SELECT 7, 4141, ' ', 50, '6/2/2014'
UNION ALL SELECT 8, 1111, 'c', 350, '6/3/2014'
UNION ALL SELECT 9, 5151, ' ', 150, '6/3/2014'
UNION ALL SELECT 10, 6161, ' ', 200, '6/3/2014'
UNION ALL SELECT 11, 3333, 'c', 400, '6/3/2014'
UNION ALL SELECT 12, 2121, ' ', 200, '6/3/2014'
UNION ALL SELECT 13, 3131, ' ', 200, '6/3/2014'
UNION ALL SELECT 14, 1111, 'c', 500, '6/5/2014'
UNION ALL SELECT 15, 4141, ' ', 100, '6/5/2014'
UNION ALL SELECT 16, 5151, ' ', 200, '6/5/2014'
UNION ALL SELECT 17, 6161, ' ', 200, '6/5/2014'
UNION ALL SELECT 18, 2222, 'c', 400, '6/5/2014'
UNION ALL SELECT 19, 4141, ' ', 400, '6/5/2014'
)
, tid( id )
AS
(
SELECT TOP (1) id FROM tbl WHERE D = '6/5/2014' and ACCT = 1111 and AMT = 500
)
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
... 하면 6/5/2014 의 ACCT 1111 에 500원 입금을 한것에 대한 하위 목록 3개 ( id 15, 16, 17) 가 잘 나옵니다.
---
이번 질문은... acct = 1111 이고 tType = 'C' 인것의 모든 하위 목록들 (빨간 글씨로 된부분) 을 어떻게 쿼리하면 모두 뽑아 낼수 있을까요?
|