묻고 답하고
OS : Microsoft Windows 2000 Server / Advanced Server SQL : Microsoft SQL Server 2000 Standard / Enterprise Edition TBL_ITEM [ITEM_NO],[NAME] 1 사과 2 레몬 3 딸기 TBL_MENU [MENU_CD],[PRICE_CD] 1 A 1 B 2 A 2 B 2 C 3 B 3 C TBL_PRICE [PRICE_CD],[PRICE] A 1000 B 2000 C 3000 이런식의 데이타에서 가져와서 여러개를 사과,(1000,2000) 레몬,(1000,2000,3000) 딸기,(2000,3000) 이렇게 콤마로 보여줘야 하는데 잘안되네요 ㅠㅠ 도움좀..주시면 고맙겟습니다. 테이블구조를 바꾸면 좋겟지만..부득이하기때문에...초보라....
한번뿐인 인생 뽜이아~
mssql은 써본지가 너무 오래되서 ㅡ,.ㅡa
원하시는 결과를 뽑을수 있는건지 제대로 파악은 못했지만 혹시라도 참고하시라고 링크나 하나 걸어봅니다.
http://www.cyworld.com/henry23/2558009
1.일단 아래 테이블을 하나 생성합니다.(이것은 임시테이블로 바꾸셔도 됩니다.)
CREATE TABLE TBL_TEMP(
[TXT_VALUE] [varchar](4000) NULL
)
GO
2. 아래 스크립트를 실행합니다.
SET NOCOUNT ON
DECLARE testCursor SCROLL CURSOR
FOR
SELECT
TI.NAME, TP.PRICE
FROM
TBL_PRICE TP,
TBL_MENU TM,
TBL_ITEM TI
WHERE
TI.ITEM_NO=TM.MENU_CD
AND
TM.PRICE_CD=TP.PRICE_CD
ORDER BY TI.NAME ASC , TP.PRICE ASC
FOR READ ONLY
OPEN testCursor
DECLARE
@NAME VARCHAR(50),
@PRICE varchar(100),
@TXT_VALUE VARCHAR(1000),
@TMP_NAME VARCHAR(1000)
FETCH FROM testCursor INTO @NAME, @PRICE
SELECT @TMP_NAME=''
SELECT @TXT_VALUE=''
DELETE TBL_TEMP
while @@FETCH_STATUS = 0
BEGIN
IF @TMP_NAME='' OR @TMP_NAME=@NAME
BEGIN
IF @TMP_NAME=''
BEGIN
SELECT @TXT_VALUE=@TXT_VALUE + @NAME +'(' + @PRICE
SELECT @TMP_NAME=@NAME
END
ELSE
BEGIN
SELECT @TXT_VALUE=@TXT_VALUE+','+@PRICE
SELECT @TMP_NAME=@NAME
END
END
ELSE
BEGIN
INSERT INTO TBL_TEMP(TXT_VALUE) VALUES(@TXT_VALUE)
SELECT @TMP_NAME=''
SELECT @TXT_VALUE=''
FETCH PRIOR FROM TESTCURSOR INTO @NAME,@PRICE
END
fetch from testCursor INTO @NAME,@PRICE
END
INSERT INTO TBL_TEMP(TXT_VALUE) VALUES(@TXT_VALUE)
close testCursor
deallocate testCursor
select TXT_VALUE+')' from TBL_TEMP
Go
저기서 도입된 원리는 간단합니다.
컬럼의 갯수가 다르면 일반적으로 단일쿼리로는 짜기가 힘듭니다.
보통 이런 구조는 어플리케이션단에서 많이 만드는데...
그냥 쿼리로만 만들다보니.....
배열이나 변수대신 문자열 저장할 임시테이블을 만들고...
커서를 이용해서 임시테이블 컬럼에 제어문을 통해서 insert 시킨후에....
그 임시테이블에 레코드를 select 한것 뿐입니다.
커서와 레코드셋 개념만 아시면 위의 내용은 걍 허접 코드일 뿐입니다만....
단지 자주 쓰지 않아서.... 책을 좀 뒤적여야 하는 ...... 한참 헤맸다는......
사실 위의 script는 transection 상에서 불안한 면이 많으니 실제 서비스 시에는 보완할 점이 많은 허접한 script 입니다.
원하시면 허접 주석정도는 달아드릴수 있습니다.
그거라면
SELECT field_name1 + ',' + field_name2 FROM table_name where...
이렇게 하시면 될것같은데
질문의 요지가 이건 아닌것 같기도 하고 ^^