Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2014中的Pivot_Sql Server_Pivot_Pivot Table - Fatal编程技术网

Sql server SQL Server 2014中的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

我很少在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         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

对于较少的分支机构,您的解决方案是准确的,但我已分享了我的查询以获取记录,请根据此添加适当的解决方案。值得思考的是:如果您添加“我希望尽快完成”,志愿者可能会拒绝协助。