sql學習系列-行轉列問題 動態列展示


最近在做項目的過程需要做一個比較復雜的統計報表,涉及行轉列問題。

首先看看報表的格式要求:

 

格式中要求按照日期的查詢進行動態查詢列標題,以及將數據進行按照日期進行列展示。

針對此要求,可以做一個簡單的例子進行說明,可以進行兩個步驟的操作:

(1)先構造基本的數據;

(2)對構造的數據進行行轉列操作。

create table test1
(
int test1,
kqrq datetime,
kqsj nvarchar(30)
);
insert into test1(zh,kqrq,kqsj) values(1,'2014-1-2','10:21')
insert into test1(zh,kqrq,kqsj) values(1,'2014-1-3','11:21')
insert into test1(zh,kqrq,kqsj) values(1,'2014-1-4','12:21')

insert into test1(zh,kqrq,kqsj) values(2,'2014-1-2','13:21')
insert into test1(zh,kqrq,kqsj) values(2,'2014-1-3','14:21')
insert into test1(zh,kqrq,kqsj) values(2,'2014-1-4','15:21')

--動態生成sql語句
declare @start_date varchar(10) = '2014-01-02',
@end_date varchar(10) = '2014-01-04';

declare @date varchar(10),
@sql varchar(max) = '',
@sql2 varchar(8000);

set @date = @start_date;

set @sql2 = 'select zh '


while @date <= @end_date
begin

set @sql2 = @sql2 + ',max(case when CONVERT(varchar(100),kqrq,23) =''' + @date +
''' then kqsj else '' '' end) as v_' + REPLACE( right(@date,5),'-','')

set @date = CONVERT(varchar(10),dateadd(day,1,@date),120)
end


set @sql =@sql2 + ' from test1
group by zh'

--生產的動態sql語句
select @sql

 

通過查詢,可以得到按照日期作為列標題的結果。

 

此次查詢需要根據日期動態的顯示列標題,所以sql中要將日期作為對應的列進行動態比較。

 

針對這種格式,需要了解行轉列的知識,此次使用case  when 語法進行解析。

對於sql方面還是需要多掌握基礎方面的知識才能很快的對客戶的報表要求,進行任務點分解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM