Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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 如何使用PIVOT从SQL中获取月份数据_Sql Server_Pivot_Sql Server 2016 - Fatal编程技术网

Sql server 如何使用PIVOT从SQL中获取月份数据

Sql server 如何使用PIVOT从SQL中获取月份数据,sql-server,pivot,sql-server-2016,Sql Server,Pivot,Sql Server 2016,我希望从该查询中获得年-月数据,以及相应的[待定]、[提交]、[确认]、[取消]、[失败]事务计数。基本上,我希望对挂起、提交、确认、取消和失败的月份事务计数 我正在使用Sql Server 2016 现在我得到了确切的数据,但月份被列出了两到三次 我想要如下格式的数据 SELECT * FROM ( SELECT YEAR(CreateDate) [Year], MONTH(CreateDate) [Month], DATENAME(MONTH,CreateDate) [Mon

我希望从该查询中获得年-月数据,以及相应的[待定]、[提交]、[确认]、[取消]、[失败]事务计数。基本上,我希望对挂起、提交、确认、取消和失败的月份事务计数

我正在使用Sql Server 2016 现在我得到了确切的数据,但月份被列出了两到三次

我想要如下格式的数据

    SELECT * FROM (
    SELECT YEAR(CreateDate) [Year], MONTH(CreateDate) [Month], DATENAME(MONTH,CreateDate) [Month Name],COUNT(id) [Total], 
    CASE 
            WHEN PaymentStatus =  1 THEN 'Pending'
            WHEN PaymentStatus =  2 THEN 'Commited'
            WHEN PaymentStatus =  3 THEN 'Confirmed'
            WHEN PaymentStatus =  4 THEN 'Canceled'
            WHEN PaymentStatus =  5 THEN 'Failed'
            ELSE ''
        END AS  PaymentStatus,count(ID) as counts 
    FROM [dbo].[BankPaymentRequest]
    GROUP BY YEAR(CreateDate), MONTH(CreateDate), DATENAME(MONTH, CreateDate), PaymentStatus) as asd
    PIVOT( SUM(counts) 
    FOR PaymentStatus IN ([Pending],[Commited],[Confirmed],[Canceled],[Failed])) AS MNamePivot

请帮助我进行此类查询或任何其他查询。

您可以尝试将现有查询放入a中,然后在对数字求和的同时按年和月分组

Year Month Total Pending Commited   Confirmed   Canceled Failed
2016  Jan  34      1        4            63          840      157
2016  Feb  34      8        4            62          8        15
2016  Mar  65      1        4            63          840      157
2016  Dec  56      8        4            62          8        15
2017  Jan  78      1        4            63          840      157
2017  Feb  89      8        4            62          8        15
2017  Mar  67      1        4            63          840      157
2017  Dec   8      4        62           8           15       345

首先,您需要确定您正在使用的DBMS。mysql sql server。然后,您需要提供一些细节,以便其他人能够提供帮助。这是一个很好的起点。如果您对sql server 2008有信心,那么请删除mysqlYes Bro,因为它对我非常有用。这给了我完美的结果。谢谢你。@Pramodlavate,不客气。如果您需要,请将其标记为已接受的答案。
WITH preselect AS 
(
SELECT * FROM (
    SELECT YEAR(CreateDate) [Year], MONTH(CreateDate) [Month], DATENAME(MONTH,CreateDate) [Month Name],COUNT(id) [Total], 
    CASE 
            WHEN PaymentStatus =  1 THEN 'Pending'
            WHEN PaymentStatus =  2 THEN 'Commited'
            WHEN PaymentStatus =  3 THEN 'Confirmed'
            WHEN PaymentStatus =  4 THEN 'Canceled'
            WHEN PaymentStatus =  5 THEN 'Failed'
            ELSE ''
        END AS  PaymentStatus,count(ID) as counts 
    FROM [dbo].[BankPaymentRequest]
    GROUP BY YEAR(CreateDate), MONTH(CreateDate), DATENAME(MONTH, CreateDate), PaymentStatus) as asd
    PIVOT( SUM(counts) 
    FOR PaymentStatus IN ([Pending],[Commited],[Confirmed],[Canceled],[Failed])) AS MNamePivot
)

SELECT [YEAR],[MONTH],SUM(TOTAL)'TOTAL',SUM(Pending)'Pending'
                    ,SUM(Commited)'Commited',SUM(Confirmed)'Confirmed'
                    ,SUM(Canceled)'Canceled',SUM(Failed)'Failed'
FROM preselect
GROUP BY [YEAR],[MONTH]