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 7249 게시물 읽기
No. 7249
쿼리 문의
작성자
정선희
작성일
2022-02-28 13:00
조회수
424

 

안녕하세요.


jsp코드로 처리하다가 쿼리로 바꾸려고 하는데...

쿼리로 가능한건지 잘 모르겠어서 도움요청드립니다.


테이블 A

po_number po_seq item_no
P01 1 MT001
P01 2 MT002


테이블B

po_number location item_no s190 s200 s210 s220
P01 서울 MT001 1 10 20 5
P01 대전 MT001 0 0 0 0
P01 부산 MT001 2 0 0 0


결과를 한페이지에 기본 20줄을 유지한채로  매장별로 하려고 합니다.

no po_number location item_no qty
1 P01 서울 MT001 s190 1
2 P01 서울 MT001 s200 10
3 P01 서울 MT001 s210 20
4 P01 서울 MT001 s220 5
5        
6        
7        
8        
9        
10        
11        
12        
13        
14        
15        
16        
17        
18        
19        
20        
합계 36


no po_number location item_no qty
1 P01 부산 MT001 s190 2
2        
3        
4        
5        
6        
7        
8        
9        
10        
11        
12        
13        
14        
15        
16        
17        
18        
19        
20        
합계 2

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

조회 조건이 어떻게 되나요?

po_number, location, item_no 등이 조회조건으로 지정이 되는 것인지?

마농(manon94)님이 2022-02-28 15:41에 작성한 댓글입니다.

앗...죄송합니다.


po_number와 location이 조건입니다.

정선희님이 2022-02-28 16:03에 작성한 댓글입니다. Edit
WITH t_b (po_number, location, item_no, s190, s200, s210, s220) AS
(
          SELECT 'P01', '서울', 'MT001', 1, 10, 20, 5
UNION ALL SELECT 'P01', '대전', 'MT001', 0,  0,  0, 0
UNION ALL SELECT 'P01', '부산', 'MT001', 2,  0,  0, 0
)
, copy_t AS
(
SELECT 1 no
 UNION ALL
SELECT no + 1
  FROM copy_t
 WHERE no < 20
)
SELECT a.no
     , b.po_number
     , b.location
     , b.item_no
     , b.qty
  FROM copy_t a
  LEFT OUTER JOIN
       (SELECT po_number, location
             , CONCAT(item_no, ' ', gb) item_no
             , qty
             , ROW_NUMBER() OVER(ORDER BY item_no, gb) rn
          FROM t_b
         UNPIVOT (qty FOR gb IN ([s190], [s200], [s210], [s220])) b
         WHERE qty > 0
           AND po_number = 'P01'
           AND location = '서울'
        ) b
    ON a.no = b.rn
;

 
마농(manon94)님이 2022-02-28 16:32에 작성한 댓글입니다.

빠른 답변 감사합니다.

가능한거군요.......

조건을 AND location in ( '서울', '부산') 하니  서울과 부산이 한페이지에 나옵니다.


화면 보여드린것처럼 페이지가 나눠지게도 가능할까요?

정선희님이 2022-02-28 16:38에 작성한 댓글입니다. Edit

만약 서울이 21건이 나오면 어떻게 표현하나요?

 - 20건만 잘라서 1페이지만 보여준다?

 - 2 페이지로 나누어 출력한다?

대전을 조건에 추가하면 어떻게 나와야 하나요?

 - 안나오면 된다?

 - 무조건 1페이지는 나와야 한다?

마농(manon94)님이 2022-02-28 16:41에 작성한 댓글입니다.
이 댓글은 2022-02-28 16:43에 마지막으로 수정되었습니다.

서울매장이 총 23건, 대전매장이 1건이라면

서울매장은 2페이지로 나오고 2번째 페이지는 17줄이 공란으로

대전매장은 1페이지가 되고 19줄이 공란으로 표기되었으면 합니다.


 

정선희님이 2022-02-28 16:57에 작성한 댓글입니다. Edit
WITH data_t (po_number, location, item_no, s190, s200, s210, s220) AS
(
          SELECT 'P01', '서울', 'MT001', 1, 10, 20, 5
UNION ALL SELECT 'P01', '대전', 'MT001', 0,  0,  0, 0
UNION ALL SELECT 'P01', '부산', 'MT001', 2,  0,  0, 0
UNION ALL SELECT 'P01', '서울', 'MT002', 2,  2,  2, 2
UNION ALL SELECT 'P01', '서울', 'MT003', 3,  3,  3, 3
UNION ALL SELECT 'P01', '서울', 'MT004', 4,  4,  4, 4
UNION ALL SELECT 'P01', '서울', 'MT005', 5,  5,  5, 5
UNION ALL SELECT 'P01', '서울', 'MT006', 6,  6,  6, 6
)
, copy_t AS
(
SELECT 1 no
 UNION ALL
SELECT no + 1
  FROM copy_t
 WHERE no < 20
)
, temp_t AS
(
SELECT po_number, location
     , CONCAT(item_no, ' ', gb) item_no
     , qty
     , CEILING(
       ROW_NUMBER() OVER(PARTITION BY location ORDER BY item_no, gb)
       / 20.) loc_page
     , ROW_NUMBER() OVER(PARTITION BY location ORDER BY item_no, gb) loc_rn
  FROM data_t
 UNPIVOT (qty FOR gb IN ([s190], [s200], [s210], [s220])) b
 WHERE qty > 0
   AND po_number = 'P01'
   AND location IN ('서울', '대전', '부산')
)
SELECT *
  FROM (SELECT po_number, location, loc_page
             , DENSE_RANK() OVER(ORDER BY location, loc_page) page_no
          FROM temp_t
         GROUP BY po_number, location, loc_page
        ) a
 CROSS JOIN copy_t b
  LEFT OUTER JOIN temp_t c
    ON a.po_number = c.po_number
   AND a.location  = c.location
   AND a.loc_page  = c.loc_page
   AND b.no        = (c.loc_rn - 1) % 20 + 1
;
마농(manon94)님이 2022-02-28 17:15에 작성한 댓글입니다.

빠른답변 감사합니다.

보내주신 답변을 보니 전 엄두가 안나네요...

정선희님이 2022-02-28 17:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7256mssql 프로시저 예외처리
MSSQL DBA
2022-05-10
251
7251MSSQL 프로시져 변수 삽입 관련 문의 [2]
DB초보
2022-03-23
355
7250SQLServer 에이전트 일괄등록이 가능한가요? [1]
윤계영
2022-03-03
344
7249쿼리 문의 [8]
정선희
2022-02-28
424
7248MS-SQL 날짜 끼워넣기 질문 (Join) [2]
김찬우
2022-02-08
393
7247MSSQL 데이터베이스 분리 질문있습니다 !! [1]
이수정
2022-01-20
404
7246하나의 컬럼만 데이터가 다르고 다른 컬럼 데이터는 모두 동일한 레코드 합치기 [3]
김정모
2022-01-17
412
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2022 DSN, All rights reserved.
작업시간: 0.121초, 이곳 서비스는
	PostgreSQL v14.2로 자료를 관리합니다