SQL Server - 根据时间使用的属性创建趋势

时间:2018-05-18 07:56:06

标签: sql-server

我有一个简单的任务:我需要查看已使用的付款方式以及不再使用的付款方式。这是我的架构:

SELECT [PAY_MODE_ID]
      ,[BILL_DATE]    
  FROM [dbo].[BILL_INFO]

所有付款方式均为:

 1, Cash
 2, Cheque
 3, Debit
 4, Free
 5, Credit Card
 6, Advanced Cash
 7, Cash Card
 8, Visa Electron
 9, e-Pay
10, Bank Transfer
11, Third-Party Collections

我希望看到一个使用趋势,即每年每月使用多少付款方式。我希望看到哪种模式正在消亡。

2 个答案:

答案 0 :(得分:1)

根据提供的信息(一些样本数据确实有帮助)我建议尝试这个查询 -

SELECT COUNT([PAY_MODE_ID])
      ,[PAY_MODE_ID]    
  FROM [dbo].[BILL_INFO]
GROUP BY [PAY_MODE_ID], MONTH([BILL_DATE]), YEAR([BILL_DATE])

这将根据使用的次数对所有可用的付款方式进行分组。

答案 1 :(得分:1)

如果您正在使用MS Excel这样的东西,请尝试第一位:

--Build sample dataset
CREATE TABLE #TMP([PAY_MODE_ID] TINYINT,[BILL_DATE] DATE)
GO
INSERT INTO #TMP
SELECT CAST(RAND()*11 AS TINYINT),DATEADD(DD,CAST(RAND()*365 AS INT),'20180101')
GO 10000

SELECT 
    [PAY_MODE_ID]
    ,MONTH([BILL_DATE]) AS [MonthNo]    
    ,DATENAME(Month,[BILL_DATE]) AS [Month]    
    ,COUNT(*) AS Cnt
 FROM #TMP
GROUP BY
    [PAY_MODE_ID]
    ,MONTH([BILL_DATE]) 
    ,DATENAME(Month,[BILL_DATE]) 

如果要在SQL环境中而不是在第三方工具中透视数据,请使用以下内容:

SELECT
    [PAY_MODE_ID]
    ,January,February,March,April,May,June,July,August,September,October,November,December
FROM
    (
        SELECT 
        [PAY_MODE_ID]
        ,DATENAME(Month,[BILL_DATE]) AS [Month]    
        ,COUNT(*) AS Cnt
    FROM #TMP
    GROUP BY
        [PAY_MODE_ID]
        ,DATENAME(Month,[BILL_DATE]) 
    ) D
        PIVOT
            (SUM(Cnt) FOR [Month] IN (January,February,March,April,May,June,July,August,September,October,November,December)) M