2014-04-21 5 views
0

내 매개 변수를 기반으로하는 열이있는 테이블을 만들어야합니다. 매개 변수는 문자열 변수이며 쉼표로 구분 된 여러 값의 월 및 연도 조합으로 구성됩니다. 이 값을 기반으로 임시 테이블을 만들어야합니다. 나는 아래처럼 시도했다테이블 만들기 열로 행 선택

DECLARE @compareMonths VARCHAR(2000) 
DECLARE @compareCount INT 
DECLARE @cols VARCHAR(2000) 
DECLARE @query AS NVARCHAR(MAX); 

SET @compareMonths = '2014-01,2014-02' 

select @cols = STUFF((SELECT distinct ',' + 
CONVERT(CHAR(3), DATENAME(MONTH, CAST(
     CAST(SUBSTRING(Data, 0, 5) AS VARCHAR(4)) + 
     RIGHT('0' + CAST(SUBSTRING(Data, 6, 2) AS VARCHAR(2)), 2) + 
     RIGHT('0' + CAST(1 AS VARCHAR(2)), 2) 
    AS DATETIME))) + ' ' + CAST(SUBSTRING(Data, 0, 5) AS VARCHAR(4)) 
         FROM dbo.Split(@compareMonths, ',') 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, ''); 

나는 여기에 달 이름과 연도가 있지만 이걸 기반으로 테이블을 동적으로 만드는 방법을 알고있다. 피벗을 사용할 값 열이 없습니다.

2014년 1월라는 이름의이 열이 있어야합니다 내 outout 테이블 2 월 2014 년

+0

당신이하고 싶은 일에 대해 분명히해야합니다. csv 문자열의 모든 단어를 추출한 다음 모두 같은 열에 삽입하고 싶습니까? 또한, 현재 직면하고있는 문제는 무엇입니까? 오류입니까? 샘플 테이블? –

+0

나는 그 값들을 행으로 포함하는 테이블로 나뉘어져있다. 이제는이 행에서 임시 테이블을 만들어야합니다. 열을 행으로 바꾸어서 테이블을 만드는 방법을 모른다. 피벗을 사용하는 다른 값 열도 없습니다 – Akhil

답변

0

당신은 SQL 데이터베이스 테이블을하려는 경우, 수 위에서

DECLARE @compareMonths VARCHAR(2000) 
SET @compareMonths = '2014-01,2014-02' 

declare @sql nvarchar(max) 

SELECT @sql = isnull(@sql + ',','') + ('[' + val + ']') + ' varchar(100)' from dbo.Split(@compareMonths, ',') 

SET @sql = N'CREATE Table OutputTable (' + @sql + ')' 
exec sp_executeSql @sql 

select * from OutputTable 

을 다음과 같이이 표 스크립트를 만들 형성 build Dynamic SQL script 또한 sql string split function을 참조 튜토리얼에서 소스 코드를 찾을 수 있습니다

결국 데이터베이스에 두 개의 열이있는 OutputTable이라는 테이블이 생깁니다

+0

고마워요. 나는이 방법을 사용하여 내 논리 변화를 월과 년으로 업데이트한다. – Akhil