開始的表是這樣滴
然後輸入SQL語句
select * from (
select ys_Branch.OldBranchDescId, ys_Branch.Name,ys_PayType.PayTypeDesc,ys_Sale.PayPrice
from ys_SaleDetail
inner join ys_Sale on ys_SaleDetail.SaleId = ys_Sale.SaleId
inner join ys_Branch on ys_SaleDetail.BranchId = ys_Branch.BranchId
inner join ys_SalePayDetail on ys_SaleDetail.SaleId = ys_SalePayDetail.SaleId
inner join ys_PayType on ys_SalePayDetail.PayType = ys_PayType.PayTypeId
)as T pivot(sum(T.PayPrice) FOR T.PayTypeDesc in (現金,銀聯卡,Master卡,Visa卡,代金券,儲值卡,支付寶,微信,積分抵扣)) as T
就變成這樣啦~~
接下來就是動態行轉列的實現
首先一開始數據源是這樣子的(qty = 銷售數量)
就是有好多好多行啦,我要顯示每個日期的銷售數量,不可能一列列手動綁定的,所以要動態生成這個日期列
於是輸入代碼
if object_id('tempdb..#AS') is not null Begin drop table #AS End /*刪除可能會創建過的臨時表*/
select * into #AS from
(select ys_Branch.Name as 店鋪名字,ys_Staff.name as 銷售員,sum(ys_SaleDetail.Quantity)as qty,ys_SaleDetail.BusinessDate as 日期
from ys_SaleDetail
inner join ys_Sale on ys_SaleDetail.SaleId = ys_Sale.SaleId
inner join ys_Branch on ys_SaleDetail.BranchId = ys_Branch.BranchId
inner join ys_Staff on ys_SaleDetail.StaffId = ys_Staff.StaffId
where ys_SaleDetail.BusinessDate between '2019-2-20' and '2019-3-5'
group by ys_Branch.Name,ys_Staff.name ,ys_SaleDetail.BusinessDate) a
DECLARE @sql VARCHAR(8000),@col varchar(1000)
set @col=(select distinct '['+cast(日期 as nvarchar(1000))+'],'
from #AS for xml path(''))
set @col=LEFT(@col,LEN(@col)-1)
set @sql='SELECT * FROM (select * from #AS) /*數據源*/ AS P PIVOT ( SUM(qty/*行轉列後 列的值*/) FOR p.日期/*需要行轉列的列*/ IN ('+@col+'/*列的值*/) )
AS T'
EXEC(@sql)
就變成這樣子啦