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 7193 게시물 읽기
No. 7193
(초보질문)주문상품에 따른 그룹주문만들기? 고수분들. 꼭 한번 봐주세요. 부탁드립니다.
작성자
추노(cunho)
작성일
2019-10-17 13:07
조회수
1,813

안녕하세요. DB 초보입니다. 

 

주문번호        |       주문상품   |    주문개수 

20190001                사과                 2

20190001                포도                 1

20190002              바나나                 4

20190002                딸기                  5

20190003                사과                  3

20190004                수박                   6

20190005               바나나                4

20190005                딸기                   6

20190006               사과                   2

20190006                포도                  1

........

 

주문데이타는 위와 같습니다. 

데이타 보시면 주문상품과 개수가 똑같은 주문들이 있습니다. 예를들면 20190001와 20190006,    그리고 20190002과 20190005

즉 이벤트 주문들이라고 보시면 될것같습니다. 주문테이블에 이벤트성 주문과 정상주문들이 합쳐져 있습니다. 

 

제가 구하고 싶은건. 이벤트성 주문들을 그룹으로 묶어서 또 다른 그룹주문번호를 생성하고 싶습니다. 

즉 제가 원하는 결과값은 아래와 같습니다. 


주문상품                       |         주문번호                    |    개수(똑같은 주문개수)              | 새그룹주문번호 

사과-2, 포도-1                   20190001,20190006                2                                              G201900001

바나나-4,딸기-5                 20190002,20190005               2                                               G20190002

사과-3                                 20190003                                1                                               G20190003

수박-6                                  20190004                              1                                                G20190004

 

이런식으로 구하고싶습니다. 

초보라보니. 단순히 select group가지고는 구현이 안됩니다. 

프로시저라도 좋으니..  구현만 해주시면 정말 큰 도움이 됩니다. ㅠㅠㅠㅠ

부탁드립니다. 꾸벅~

 

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

WITH t AS
(
SELECT '20190001' no, '사과' cd, 2 cnt
UNION ALL SELECT '20190001', '포도'  , 1
UNION ALL SELECT '20190002', '바나나', 4
UNION ALL SELECT '20190002', '딸기'  , 5
UNION ALL SELECT '20190003', '사과'  , 3
UNION ALL SELECT '20190004', '수박'  , 6
UNION ALL SELECT '20190005', '바나나', 4
UNION ALL SELECT '20190005', '딸기'  , 5
UNION ALL SELECT '20190006', '사과'  , 2
UNION ALL SELECT '20190006', '포도'  , 1
)
-- MSSQL 2017 STRING_AGG
SELECT cd
     , STRING_AGG(no, ',') WITHIN GROUP(ORDER BY no) no
     , COUNT(*) cnt
     , CONCAT('G2019', RIGHT(10000 + ROW_NUMBER() OVER(ORDER BY cd), 4)) n
  FROM (SELECT no
             , STRING_AGG(CONCAT(cd, '-', cnt), ',')
               WITHIN GROUP(ORDER BY cd) cd
          FROM t
         GROUP BY no
        ) a
 GROUP BY cd
;

마농(manon94)님이 2019-10-18 09:44에 작성한 댓글입니다.
이 댓글은 2019-10-18 09:45에 마지막으로 수정되었습니다.

주문 데이터가 얼마나 많은지 모르겠지만

권장할만한 작업은 아닌것 같네요.

 

with t AS (
select '20190001' ord_no, '사과' ord_prd, 2 ord_qty
union all
select '20190001' ord_no, '포도' ord_prd, 1
union all
select '20190002' ord_no, '바나나' ord_prd, 4
union all
select '20190002' ord_no, '딸기' ord_prd, 5
union all
select '20190003' ord_no, '사과' ord_prd, 3
union all
select '20190004' ord_no, '수박' ord_prd, 6
union all
select '20190005' ord_no, '바나나' ord_prd, 4
union all
select '20190005' ord_no, '딸기' ord_prd, 5
union all
select '20190006' ord_no, '사과' ord_prd, 2
union all
select '20190006' ord_no, '포도' ord_prd, 1
),
g AS (
	select distinct ord_no
		,stuff(( select ',' + ord_prd +'-'+convert(varchar,ord_qty)
				 from t
				 where ord_no=lst.ord_no
				 for xml path('')
		),1,1,'') as prds
	from t as lst
) 
select prds '주문상품'
	   ,max(ords) '주문번호'
	   ,count(*) '개수'
from (
	select prds
		   , stuff(( select ',' + ord_no
					 from g
					 where prds=glst.prds
					 for xml path('')
			),1,1,'') as ords
	from g as glst
) l
group by prds
;
 
박인호(paerae)님이 2019-10-18 10:19에 작성한 댓글입니다.
이 댓글은 2019-10-18 10:20에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
7197도와 주세요.... 모르겠어요...ㅜㅜ [2]
도와주세요ㅜㅜ
2019-12-02
1794
7195초보질문 [5]
ohyouknow
2019-11-01
1895
7194sub query [4]
ohyouknow
2019-10-30
1869
7193(초보질문)주문상품에 따른 그룹주문만들기? 고수분들. 꼭 한번 봐주세요. 부탁드립니다. [2]
추노
2019-10-17
1813
7191스페이스 문자 인식을 못할때가 있어요. [1]
바람날개
2019-10-03
1782
7190select 내용 동적으로 변경
DB초보
2019-09-23
1810
7189【급급급】초보입니다. 쿼리문 도와주세요.. [2]
추노
2019-09-22
1936
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다