【发布时间】:2016-05-04 15:33:14
【问题描述】:
我很少在 sql server 中使用 PIVOT,但现在要求我必须使用 PIVOT。这是我想在其上使用数据透视的单列。
例如我的表结构是这样的
Branch Date Amt1 Amt2 Amt3
LHE 2016-05-02 155869 255878 -100009
LHE 2016-05-03 9270 124159 -114889
LHE 2016-05-04 95556 95556 0
FSD 2016-05-02 155869 255878 -100009
FSD 2016-05-03 9270 124159 -114889
FSD 2016-05-04 95556 95556 0
但我想要这种格式的结果
LHE LHE LHE FSD FSD FSD
Date Amt1 Amt2 Amt3 Amt1 Amt2 Amt3
2016-05-02 155869 255878 -100009 155869 255878 -100009
2016-05-03 9270 124159 -114889 9270 124159 -114889
2016-05-04 95556 95556 0 95556 95556 0
我怎么得到这个?
Insert Into #Data
Select B.BranchName,ReceiptDate,CODAmount,ReceiptAmount,BalanceAmount
From
(
SELECT BranchID, ReceiptDate,Sum(CODAmount) AS CODAmount,Sum(ReceiptAmount) AS ReceiptAmount,(Sum(CODAmount) - Sum(ReceiptAmount)) AS BalanceAmount
FROM ( Select MV.DestBranchID as BranchID,Convert(Date,MV.VerificationDate) as ReceiptDate,Sum(DV.ReceiptAmount) as CODAmount,0 AS ReceiptAmount
From dbo.CODVerification MV Inner Join dbo.CODVerificationDetail DV ON MV.DestBranchID = DV.DestBranchID and MV.VerificationID = DV.VerificationID
Where Convert(Date,MV.VerificationDate) Between @FromDate And @ToDate
Group By MV.DestBranchID,Convert(Date,MV.VerificationDate)
UNION
Select R.DestBranchID as BranchID,Convert(Date,R.ReceiptDate) as ReceiptDate,0 AS CODAmount,Sum(D.ReceiptAmount) as ReceiptAmount
From dbo.ReceiptCod R
Inner Join dbo.ReceiptCodDetail D ON R.DestBranchID = D.DestBranchID and R.ReceiptID = D.ReceiptID
Where Convert(Date,R.ReceiptDate) Between @FromDate And @ToDate
Group By R.DestBranchID,Convert(Date,R.ReceiptDate)
)F GROUP BY BranchID, ReceiptDate
)FA
Inner Join dbo.CMSBranches B ON FA.BranchID = B.BranchID
SELECT 'To Date' as ColDesc,ReceiptDate,
IsNull(LHE,0) as LHECOD,IsNull(LHE,0) as LHERecptAmt,IsNull(LHE,0) as LHEBalAmt
--IsNull(FSD,0) as FSD,IsNull(RWP,0) as RWP,IsNull(PWR,0) as PWR,IsNull(SKP,0) as SKP,IsNull(KSR,0) as KSR,
--IsNull(SKZ,0) as SKZ,IsNull(KHI,0) as KHI,IsNull(GUJ,0) as GUJ,IsNull(MUL,0) as MUL,IsNull(RYK,0) as RYK,
--IsNull(HDD,0) as HDD,IsNull(UET,0) as UET,IsNull(GWR,0) as GWR,IsNull(TUR,0) as TUR,IsNull(HOL,0) as HOL,
--IsNull(HOK,0) as HOK,IsNull(JLM,0) as JLM,IsNull(SKT,0) as SKT,IsNull(MIR,0) as MIR,IsNull(OSD,0) as OSD,
--IsNull(SGD,0) as SGD,IsNull(SWL,0) as SWL,IsNull(PSN,0) as PSN,IsNull(KZD,0) as KZD,IsNull(MGT,0) as MGT,
--IsNull(BHV,0) as BHV,IsNull(DGK,0) as DGK,IsNull(DIK,0) as DIK,IsNull(HFZ,0) as HFZ,IsNull(MBD,0) as MBD,
--IsNull(ABT,0) as ABT,IsNull(OKA,0) as OKA,IsNull(GRT,0) as GRT,IsNull(KWL,0) as KWL,IsNull(MZG,0) as MZG,
--IsNull(HOI,0) as HOI,IsNull(HOF,0) as HOF,IsNull(ABBOTABAD,0) as ABBOTABAD,IsNull(THATTA,0) as THATTA
FROM
(
Select BranchName,BranchName AS BranchName1,BranchName AS BranchName2,ReceiptDate,CodAmount,ReceiptAmount,BalanceAmount From #Data
) sq
PIVOT
(
SUM(CodAmount) FOR BranchName In
(
LHE
--LHE,FSD,RWP,PWR,SKP,KSR,SKZ,KHI,GUJ,MUL,RYK,HDD,UET,GWR,TUR,HOL,HOK,JLM,SKT,MIR,OSD,SGD,SWL,PSN,KZD,MGT,BHV,DGK,DIK,HFZ,MBD,ABT,OKA,GRT,KWL,MZG,
--HOI,HOF,ABBOTABAD,THATTA
)
) AS pt
PIVOT
(
SUM(ReceiptAmount) FOR BranchName1 In
(
LHE--RecptAmt
--LHE,FSD,RWP,PWR,SKP,KSR,SKZ,KHI,GUJ,MUL,RYK,HDD,UET,GWR,TUR,HOL,HOK,JLM,SKT,MIR,OSD,SGD,SWL,PSN,KZD,MGT,BHV,DGK,DIK,HFZ,MBD,ABT,OKA,GRT,KWL,MZG,
--HOI,HOF,ABBOTABAD,THATTA
)
) AS pt1
PIVOT
(
SUM(BalanceAmount) FOR BranchName2 In
(
LHE--BalAmt
--LHE,FSD,RWP,PWR,SKP,KSR,SKZ,KHI,GUJ,MUL,RYK,HDD,UET,GWR,TUR,HOL,HOK,JLM,SKT,MIR,OSD,SGD,SWL,PSN,KZD,MGT,BHV,DGK,DIK,HFZ,MBD,ABT,OKA,GRT,KWL,MZG,
--HOI,HOF,ABBOTABAD,THATTA
)
) AS pt2
【问题讨论】:
-
深思熟虑:如果您添加“我要尽快”,志愿者可能会拒绝提供帮助。
标签: sql-server pivot pivot-table