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 6870 게시물 읽기
No. 6870
안녕하세요. 쿼리 질문좀 드릴려고합니다.
작성자
초보자
작성일
2015-01-06 17:45
조회수
5,626

 안녕하세요.

쿼리 초보자 입니다.

이곳에서 많은 정보 와 지식을 얻어 가고 있습니다.

다름이 아니라 제가 쿼리를 하나 만들어야 하는데요

좀 복잡한 쿼리 이긴 한데 어느정도 완성은 되어 가고 있습니다.

그런데 문제가 생겼네요.

tmp_table 에 제품코드, 제품명, 수량 이렇게 들어가 있는데요.

제품코드로 조건을 걸고 조회시 제품수량 수 만큼 로우가 생성이 되야 해서요.

도움 부탁드리겠습니다..

새해복 많이 받으세요..

 

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

안녕하세요.

제가 이해를 제대로 한 것인지 모르겠네요..

제품코드 수만큼 Row를 만들어야 된다..

라고 이해를 했구요.....(잘못 이해했을지도 모르겠네요..)

조건절이야 Where 절 걸면 될듯하여

안넣었습니다.


With tmp_table As
(
   Select 'TV'     As code,'텔레비전'    As name,40  As qty  Union All
   Select 'VIDEO'  As code,'비디오'      As name,940 As qty  Union All
   Select 'TV'     As code,'텔레비전'    As name,40  As qty  Union All
   Select 'RADIO'  As code,'라디오'      As name,10  As qty  Union All
   Select 'TV'     As code,'텔레비전'    As name,2   As qty  Union All
   Select 'RADIO'  As code,'라디오'      As name,40  As qty  Union All
   Select 'VIDEO'  As code,'비디오'      As name,140 As qty 
)
    Select
           A.code       As code
          ,MAX(A.name)  As name
          ,SUM(A.qty )  As qty
      From tmp_table As A 
  Group By A.code  
  Order By A.code ASC

최한영(terry0515)님이 2015-01-06 18:18에 작성한 댓글입니다.
이 댓글은 2015-01-06 18:20에 마지막으로 수정되었습니다.

 감사합니다.

제가 질문을 드린건..

제품코드               제품명                 수량

0001                        티비                     5

0002                        라됴                      3

0003                         비됴                    2

 

이렇게 데이터가 들어가 있으면

수량 수만큼 로우가 생성되야 합니다.

티비 5줄

라됴 3줄

비됴 2줄 

이렇게 총 10개의 로우가 생성되야 합니다.

 

감사합니다.

초보자님이 2015-01-06 18:26에 작성한 댓글입니다. Edit

WITH tmp_table AS
(
SELECT '0001' cd, '티비' nm, 5 cnt
UNION ALL SELECT '0002', '라됴', 3
UNION ALL SELECT '0003', '비됴', 2
)
, tmp AS
(
SELECT cd, nm, cnt
     , 1 rn
  FROM tmp_table
 UNION ALL
SELECT cd, nm, cnt
     , rn + 1 rn
  FROM tmp
 WHERE rn + 1 <= cnt
)
SELECT *
  FROM tmp
 ORDER BY cd, rn
;

마농(manon94)님이 2015-01-06 18:28에 작성한 댓글입니다.

 마농님 답변감사합니다.

혹시 저 쿼리가 mssql2000 에서도 돌아 갈까요.??

아직까지 2000을 못버린 1인입니다.

감사합니다.

초보자님이 2015-01-07 09:24에 작성한 댓글입니다. Edit

mssql 2000 에서 돌아가는지는 제가 모르겠네요.

직접 실행해 보시고 결과 알려주세요.

마농(manon94)님이 2015-01-07 11:04에 작성한 댓글입니다.

 네 마농님 테스트 해보았습니다.

2005 에서는 잘되는데

2000 에는 에러가 나네요..ㅠㅠ

부탁좀 드리겠습니다.

감사합니다.

초보자님이 2015-01-07 11:37에 작성한 댓글입니다. Edit

WITH tmp_table AS
(
SELECT '0001' cd, '티비' nm, 5 cnt
UNION ALL SELECT '0002', '라됴', 3
UNION ALL SELECT '0003', '비됴', 2
)
, copy_t AS
(
SELECT 1 rn
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
)
SELECT *
  FROM tmp_table a
 INNER JOIN copy_t b
    ON a.cnt >= b.rn
 ORDER BY cd, rn
;

마농(manon94)님이 2015-01-07 11:47에 작성한 댓글입니다.

 마농님 빠른답변 감사드립니다.

2000에서 실행시 

 

(

SELECT '0001' cd, '티비' nm, 5 cnt

UNION ALL SELECT '0002', '라됴', 3

UNION ALL SELECT '0003', '비됴', 2

)

, copy_t AS

(

SELECT 1 rn

UNION ALL SELECT 2

UNION ALL SELECT 3

UNION ALL SELECT 4

UNION ALL SELECT 5

UNION ALL SELECT 6

UNION ALL SELECT 7

UNION ALL SELECT 8

UNION ALL SELECT 9

)

이구문 자체가 오류가 나네요..

저구분을 변경할수는 없을까요.??

그리고 coyp_t 라는 테이블을 사용하는 이유도 좀 알려주세요.

초보라 아는게 없습니다.

감사합니다.

초보자님이 2015-01-07 13:47에 작성한 댓글입니다. Edit

WITH 구문은 실제 테이블이 없어서 대신 사용한 거구요.
WITH 구문 없이 Select 부터 사용하시면 됩니다.
copy_t 테이블 또한 미리 만들어 두셔야 합니다.(숫자 넉넉하게)
이와 같은 요구사항이 있을 때 유용하게 사용될 테이블입니다.

마농(manon94)님이 2015-01-07 14:14에 작성한 댓글입니다.

 마농님 감사합니다.

해결되었습니다.

새해복 많이 받으세요.

초보자님이 2015-01-08 15:42에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6873MSSQL 2014 하위버전 차이점 아시는분? [1]
노지석
2015-01-19
6389
6872데이터그리드뷰에 데이터를 불러와 뿌려줘야하는데 join이 너무 많이 쓰입니다. [5]
kshap
2015-01-12
5595
6871Query 좀 가르쳐 주세요~ [5]
한강현
2015-01-11
5700
6870안녕하세요. 쿼리 질문좀 드릴려고합니다. [10]
초보자
2015-01-06
5626
6868[질문] OSQL을 배치파일로 만들어서 사용하는방법 문의
정규성
2014-12-16
5046
6867mssql에서 asp.net 관련된 질문인데요 ㅠㅠ
김현서
2014-12-03
5043
6865분산트랜잭션
지상우
2014-12-01
5524
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.047초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다