Sql server 2008 如何按月显示订单的计数

Sql server 2008 如何按月显示订单的计数,sql-server-2008,Sql Server 2008,你能帮我用sql语句按月份和年份查找Appid计数顺序,但不计算现有的月份和年份Appid吗 column name TYPE ID int AppID int Month int Year int Records ID Appid Month Year 207 396 Jan 2013 250 396 Feb 2013 283 396 Mar 2013 319 396 Apr 2013 36

你能帮我用sql语句按月份和年份查找Appid计数顺序,但不计算现有的月份和年份Appid吗

column name     TYPE   
ID          int 
AppID           int 
Month           int 
Year            int 

Records
ID Appid Month Year
207 396 Jan 2013
250 396 Feb 2013
283 396 Mar 2013
319 396 Apr 2013
365 396 May 2013
221 451 Feb 2013
262 451 Mar 2013
293 451 Apr 2013
329 451 May 2013
384 451 June 2013
354 609 May 2013
394 702 June 2013
353 707 May 2013
我希望输出如下所示

Month      count
January     1
February    1
March       0
April       0
May         2
June        1

例如,如果appid=396,我只想显示所有appid的最小月记录计数,且仅2月的值为1,给定您的样本记录,则输出(在地球上)如下所示:

| MONTH |   COUNT  |
--------------------
|   Apr |        2 |
|   Feb |        2 |
|   Jan |        1 |
|  June |        2 |
|   Mar |        2 |
|   May |        4 |
从哪来的

SELECT Month, COUNT(*)
FROM gargle
GROUP BY Month
这就引出了问题

  • 您使用什么逻辑来更改所需结果中的记录计数
  • 您是否正在尝试为特定的
    appid
    填写缺少的月份
  • 为什么要分别存储
    ,而不是作为
    日期

  • 我相信您只想在每个
    Appid
    的第一个月进行计数。因此,假设SQL Server 2005+:

    ;WITH CTE AS
    (
        SELECT  *,
                RN=ROW_NUMBER() OVER(PARTITION BY Appid ORDER BY ID)
        FROM YourTable
    )
    
    SELECT  A.[Year],
            A.[Month],
            COUNT(B.ID)
    FROM (  SELECT DISTINCT [Year], [Month]
            FROM YourTable) A
    LEFT JOIN ( SELECT *
                FROM CTE
                WHERE RN = 1) B
        ON A.[Year] = B.[Year] 
        AND A.[Month] = B.[Month]
    GROUP BY A.[Year],
             A.[Month]
    

    你用什么逻辑神奇地忽略了实际计数?为什么
    Feb=1
    ,而不是2?我认为您需要澄清如何获得输出的逻辑。例如,如果appid=396,我只想显示所有appid的最小月记录计数,该值仅为2月1日。例如,顶部有名为记录的样本记录,如果appid=396,我只想显示所有appid的最小月记录计数,只有2月份的值为1,您应该在问题中明确说明这一点?+1,但月份不符合顺序。绝对不能接受。谢谢你的帮助。。它的效果很好