第一:你的時間維度表基本沒有意義,微軟SSIS中心認為時間維度至少由日期構成主鍵??梢哉J為是最小基本業(yè)務顆粒。
成都創(chuàng)新互聯(lián)公司專注于做網(wǎng)站、成都網(wǎng)站設計、網(wǎng)頁設計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
來個Sample,更復雜的在我空間里。但是道理是一樣的。都是借助動態(tài)SQL和一些函數(shù)。
----------------------------------------------------------------
/*
作者:Edwin
數(shù)據(jù)庫:SQL?SERVER?2005+
作用:指定時間區(qū)間的自然周有幾天,如果垮年度,由外圍驗證
Version?1.0
Copyright?(c)?2015,?SQL?SERVER?2008
*/
----------------------------------------------------------------
/*參數(shù)設定區(qū)域,參數(shù)為開始時間和結束時間*/
----------------------------------------------------------------
declare?@FDate?DateTime?set?@FDate?=?'2014-09-01?00:00:00.000'
declare?@Edate?DateTime?set?@Edate?=?'2015-01-01?00:00:00.000'
----------------------------------------------------------------
/*SQL主體*/
----------------------------------------------------------------
declare?@WeekHeader?nvarchar(max)
select?@WeekHeader?=?coalesce(@WeekHeader+',['+cast(WeekOfYear?as?varchar)+']','['+cast(WeekOfYear?as?varchar)+?']')
from?
(
select?WeekOfYear?from?Comn.Calendar?where?DatePerDay=@FDate?and?DatePerDay@Edate?group?by?WeekOfYear?
)?M
declare?@PivotSQL?nvarchar(max)?set?@PivotSQL=N'
select
Year?as?年份,'+@WeekHeader+'
from
(
select?[Year],WeekOfYear,DatePerDay?from?[DT_WareHouse].[Comn].[Calendar]?where?DatePerDay=@FDate?and?DatePerDay@Edate
)?M
pivot
(
count(DatePerDay)?for?[WeekOfYear]?in('+@WeekHeader+')
)?PVT'
exec?sp_executesql?@PivotSQL,N'@FDate?datetime,@Edate?datetime',@FDate,@Edate
執(zhí)行結果:
在看一下時間維度表:
至于PVT標題別名問題,這個可以在時間維度表中創(chuàng)建字符串類型的第幾周等樣式的列來完成。
這種方式比較簡單。
或是
----------------------------------------------------------------
/*
作者:Edwin
數(shù)據(jù)庫:SQL?SERVER?2005+
作用:指定時間區(qū)間的自然周銷售,統(tǒng)計周期為某一年,如果垮年度,由外圍驗證
Version?1.0
Copyright?(c)?2015,?SQL?SERVER?2008
*/
----------------------------------------------------------------
/*參數(shù)設定區(qū)域,參數(shù)為開始時間和結束時間*/
----------------------------------------------------------------
declare?@FDate?DateTime?set?@FDate?=?'2014-09-01?00:00:00.000'
declare?@Edate?DateTime?set?@Edate?=?'2015-01-01?00:00:00.000'
----------------------------------------------------------------
/*SQL主體*/
----------------------------------------------------------------
declare?@WeekHeader?nvarchar(max)
select?@WeekHeader?=?coalesce(@WeekHeader+',['+cast(WeekOfYear?as?varchar)+']','['+cast(WeekOfYear?as?varchar)+?']')
from?
(
select?('第'+cast(WeekOfYear?as?varchar)+'周')?as?WeekOfYear?from?Comn.Calendar?where?DatePerDay=@FDate?and?DatePerDay@Edate?group?by?WeekOfYear?
)?M
declare?@PivotSQL?nvarchar(max)?set?@PivotSQL=N'
select
Year?as?年份,'+@WeekHeader+'
from
(
select?[Year],(''第''+cast(WeekOfYear?as?varchar)+''周'')?as?WeekOfYear,DatePerDay?from?[DT_WareHouse].[Comn].[Calendar]?where?DatePerDay=@FDate?and?DatePerDay@Edate
)?M
pivot
(
count(DatePerDay)?for?[WeekOfYear]?in('+@WeekHeader+')
)?PVT'
exec?sp_executesql?@PivotSQL,N'@FDate?datetime,@Edate?datetime',@FDate,@Edate
結果:
sql server 請參閱下面的代碼,列轉(zhuǎn)行
sqlserver列轉(zhuǎn)行方法分享
以下例子適用 sqlserver 2005版本及以上
create?table?A?(?info1?varchar(30),
[2012]?int,
[2008]?int,
[2018]?int,
[2013]?int
)
go
insert?into?A?values('A',8,null,null,20)
insert?into?A?values('B',null,7,null,3)
insert?into?A?values('C',12,4,null,null)
insert?into?A?values('D',null,null,5,16)
go
---列行轉(zhuǎn)換?適用于sql?server?2005及以上版本
SELECT?info1,nian,qty
from?A
unpivot(qty?for?nian?in([2012],[2008],[2018],[2013]))as?test
GO
truncate?table?A
drop?table?A
ID name sex
----------------
01 aaa nv
02 bbb nan
03 ccc nv
表內(nèi)每一個數(shù)據(jù)都是一個元,而一行,所表示的是ID=01的資料,所以可以叫 元組 一組數(shù)據(jù)
而比如name列,表示的是三組中的name屬性 所以可以理解為列為屬性一說
1,首先創(chuàng)建數(shù)據(jù)表
2,接著插入演示數(shù)據(jù)
3,需要把學生的每門成績集中到一行
4,編寫PIVOT函數(shù)實現(xiàn)
5,運行以后實現(xiàn)行轉(zhuǎn)列
6,最后還可以用case when來實現(xiàn)
目前除了povit沒什么別的好方法,你也可以去report
server
里面的矩陣看看,這個東西性能平時很少有人關注
分享名稱:sqlserver列和行,數(shù)據(jù)庫的行和列
轉(zhuǎn)載來源:http://jinyejixie.com/article18/hojjdp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設計公司、關鍵詞優(yōu)化、網(wǎng)站導航、營銷型網(wǎng)站建設、品牌網(wǎng)站建設、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)