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 5721 게시물 읽기
No. 5721
여러개의 Row값을 하나의 Row에 나오게 하는방법
작성자
자바천재
작성일
2010-07-30 10:35
조회수
8,059

CREATE PROCEDURE dbo.sp_bbs_list

AS
begin
 declare @sql  varchar(2000),  @num varchar(8),@total varchar(8)

 set @sql='
 SELECT ISSU_CNTS
FROM TEST_TABLE WHERE SALE_NO = ''1111'''
 exec(@sql)
         
end

 

상기내역은 여러개의 ROW값을 가져오겠지요

그런데 이것을 하나의 ROW로 가져오려고 합니다

아래Source처럼요

 

CREATE PROCEDURE dbo.SP_BAT_VIEW1
 -- Add the parameters for the stored procedure here

 @I_PER_GBN   VARCHAR(1),    --기간구분
 @I_STR_YMD   VARCHAR(8),    -- 시작일
 @I_END_YMD   VARCHAR(8),             -- 종료일
 @I_BAT_FLD_DIV     VARCHAR(1)              -- BattleField 구분

AS
BEGIN
   
-- 변수 선언부
DECLARE @TEMP_ISSUE_CNTS VARCHAR(5000) 
DECLARE @ROW_ISSUE_CNTS  VARCHAR(500) 
DECLARE @SQL VARCHAR(4000) 
declare CUR_TEMP01 Cursor for
SELECT ISSU_CNTS
FROM TEST_TABLE WHERE SALE_NO = '1111'
--커서 오픈
OPEN CUR_TEMP01
 set @TEMP_ISSUE_CNTS = ''
 set @ROW_ISSUE_CNTS = ''

FETCH NEXT FROM CUR_TEMP01 INTO @ROW_ISSUE_CNTS
WHILE @@FETCH_STATUS = 0

BEGIN
 SET @TEMP_ISSUE_CNTS = @TEMP_ISSUE_CNTS + @ROW_ISSUE_CNTS

 FETCH NEXT FROM CUR_TEMP01 INTO @ROW_ISSUE_CNTS
 
 END

 --커서 CLOSE
 CLOSE CUR_TEMP01

 --커서 DEALLOCATE
 DEALLOCATE CUR_TEMP01

SET @SQL='select '+@TEMP_ISSUE_CNTS
--SET @SQL='select '+@TEMP_ISSUE_CNTS +'= LEFT('+@TEMP_ISSUE_CNTS+', len('+@TEMP_ISSUE_CNTS+')-1)'

EXEC(@SQL)
END

 

그런데 이상하게 에러가 나네요...................

왜 그런지 모르겠습니다

답변 부탁드리겠씁니다

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

변수이름만 봐서는 숫자형 같은데 숫자형은 SUM() 해주면 될것 같은데 숫자형은 아닌가 보네요

그럼 문자형이라 생각하고..

CREATE PROCEDURE dbo.SP_BAT_VIEW1
 -- Add the parameters for the stored procedure here

 @I_PER_GBN   VARCHAR(1),    --기간구분
 @I_STR_YMD   VARCHAR(8),    -- 시작일
 @I_END_YMD   VARCHAR(8),             -- 종료일
 @I_BAT_FLD_DIV     VARCHAR(1)              -- BattleField 구분

AS
BEGIN
   
-- 변수 선언부
DECLARE @TEMP_ISSUE_CNTS VARCHAR(5000)
DECLARE @ROW_ISSUE_CNTS  VARCHAR(500)
DECLARE @SQL VARCHAR(4000)

BEGIN


 set @TEMP_ISSUE_CNTS = ''
 
 SELECT @TEMP_ISSUE_CNTS = @TEMP_ISSUE_CNTS  + ISSU_CNTS
   FROM TEST_TABLE WHERE SALE_NO = '1111'

 

END

SET @SQL='select '+@TEMP_ISSUE_CNTS
--SET @SQL='select '+@TEMP_ISSUE_CNTS +'= LEFT('+@TEMP_ISSUE_CNTS+', len('+@TEMP_ISSUE_CNTS+')-1)'

EXEC(@SQL)
END

이렇게 하시면 될것 같은데요..

틀린부분 있으면 지적 부탁드려요

agoodman99님이 2010-07-30 13:25에 작성한 댓글입니다.
이 댓글은 2010-07-30 13:28에 마지막으로 수정되었습니다. Edit

답변 감사합니다

그런데 똑같은 에러가 나네요...

단순 Query로 하면

----------------------------------

이슈내용 테스트

추가이슈 등록

testtestes

ffffffff

이슈내용

이슈내용

--------------------------------

이렇게 나오는데

저 데이터를 6Row로 오는게 아니라 1Row담고 싶은거거든요...

 

그런데 Error Message 는

'등록testtestesffffffff이슈내용이슈내용' 근처의 구문이 잘못되었습니다

 

이런 Message가 뜹니다

1Row로 나오데 각각의 값을 \n 으로 해서 다음줄 다음줄 이런식으로 오게 할려구 하는거거든요....

자바천재님이 2010-07-30 14:01에 작성한 댓글입니다. Edit

저도 MSSQL을 이제 공부하고 있는 초보인지라 실수가 많네요..

실행이 Select  등록testtestesffffffff 이렇게 되버려서 에러가 나왔네요

Select  '등록testtestesffffffff ' 이런식으로 잡아줘야 에러가 안나네요..

SELECT @TEMP_ISSUE_CNTS = @TEMP_ISSUE_CNTS  + ISSU_CNTS + char(13)
   FROM TEST_TABLE WHERE SALE_NO = '1111'

 set @sql = 'select ''' + @TEMP_ISSUE_CNTS+ ''''

EXEC (@sql)

실행해 보니 에러는 없는데 SQL 2005에선 한줄로만 보이네요

하지만 그리드나 프로그램에 적용되면 한 로우에 엔터가 들어간 형태로 보일듯 싶습니다.

 

agoodman99님이 2010-07-30 16:47에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5725SQLServer2008R2 평가판->정식판 으로 설정하는 방법좀 부탁드립니다.
쩡쌍
2010-08-03
6952
5724급)날짜 형식 관련 질문이염...
김용원
2010-08-02
6824
5722EM 작업창 내용을 구하는 쿼리 질문입니다. [1]
승호
2010-07-30
6685
5721여러개의 Row값을 하나의 Row에 나오게 하는방법 [3]
자바천재
2010-07-30
8059
5720MS SQL 2008 (Enterprise) 감사(audit) 로그 검색 방법이 궁금합니다.
이열
2010-07-29
7501
5718안녕하세요.. DB를 배우기 시작한지 4주된 늅입니다.. [1]
김광선
2010-07-29
6786
5717매번 죽을상으로 덤벼드네요ㅠㅠ 한번보시고 도움부탁드리겠습니다 [3]
정재원
2010-07-29
8467
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다