동적 SQL을 사용하는 SQL Server의 동적 피벗 데이터
이 문서에서는 동적 SQL을 사용하여 SQL Server에서 데이터를 동적으로 피벗하는 방법을 소개합니다.
질문
"Date", "Category" 및 "Amount" 열이 있는 테이블이 있는 경우 목표는 데이터를 범주가 열이 되고 날짜가 행이 되는 피벗 형식으로 변환하는 것입니다. 변환된 데이터는 다음과 같습니다.
<code>日期 ABC DEF GHI 1/1/2012 1000.00 2/1/2012 500.00 2/1/2012 800.00 2/10/2012 700.00 3/1/2012 1100.00</code>
솔루션
SQL Server에서 동적 피버팅을 구현하려면 동적 SQL을 사용할 수 있습니다. 단계별 지침은 다음과 같습니다.
샘플 코드
<code class="language-sql">-- 创建临时表 CREATE TABLE temp ( date DATETIME, category VARCHAR(3), amount MONEY ); -- 插入示例数据 INSERT INTO temp VALUES ('1/1/2012', 'ABC', 1000.00); INSERT INTO temp VALUES ('2/1/2012', 'DEF', 500.00); INSERT INTO temp VALUES ('2/1/2012', 'GHI', 800.00); INSERT INTO temp VALUES ('2/10/2012', 'DEF', 700.00); INSERT INTO temp VALUES ('3/1/2012', 'ABC', 1100.00); -- 构建动态列列表 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.category) FROM temp c FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,''); -- 构造动态查询 SET @query = 'SELECT date, ' + @cols + ' from ( select date , amount , category from temp ) x pivot ( max(amount) for category in (' + @cols + ') ) p '; -- 执行动态查询 EXECUTE(@query); -- 删除临时表 DROP TABLE temp;</code>
결과
<code>日期 ABC DEF GHI 2012-01-01 00:00:00.000 1000.00 NULL NULL 2012-02-01 00:00:00.000 NULL 500.00 800.00 2012-02-10 00:00:00.000 NULL 700.00 NULL 2012-03-01 00:00:00.000 1100.00 NULL NULL</code>
위 내용은 동적 SQL을 사용하여 SQL Server에서 데이터를 동적으로 피벗하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!