Sql server SQL Server 2014中的Pivot
我很少在SQLServer中使用PIVOT,但现在我必须使用PIVOT。这是我要在其上使用pivot的单个列 例如,我的表结构就是这样Sql server SQL Server 2014中的Pivot,sql-server,pivot,pivot-table,Sql Server,Pivot,Pivot Table,我很少在SQLServer中使用PIVOT,但现在我必须使用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
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
编辑:没有意识到您需要使用pivot。我仍然认为下面的解决方案会更好 如果这是您的所有数据,那么您可以执行以下操作: **测试数据
CREATE TABLE #TableName (Branch varchar(3), Date datetime, Amt1 int, Amt2 int, Amt3 int)
INSERT INTO #TableName
VALUES
('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')
使用子选择查询FSD
SELECT
a.Date
,a.Amt1 LHE_Amt1
,a.Amt2 LHE_Amt2
,a.Amt3 LHE_Amt3
,b.Amt1 FSD_Amt1
,b.Amt2 FSD_Amt2
,b.Amt3 FSD_Amt3
FROM #TableName a
JOIN (SELECT Date, Amt1, Amt2, Amt3 FROM #TableName WHERE Branch = 'FSD') b
ON a.date = b.date
WHERE a.Branch = 'LHE'
结果
Date LHE_Amt1 LHE_Amt2 LHE_Amt3 FSD_Amt1 FSD_Amt2 FSD_Amt3
2016-05-02 00:00:00.000 155869 255878 -100009 155869 255878 -100009
2016-05-03 00:00:00.000 9270 124159 -114889 9270 124159 -114889
2016-05-04 00:00:00.000 95556 95556 0 95556 95556 0
对于较少的分支机构,您的解决方案是准确的,但我已分享了我的查询以获取记录,请根据此添加适当的解决方案。值得思考的是:如果您添加“我希望尽快完成”,志愿者可能会拒绝协助。