在更新语句中计数

时间:2016-03-28 09:44:47

标签: sql-server tsql count sql-update sql-server-2014

我的时间表包含AmountDayOfMonth列,其值为NULL。 我需要更新此列并插入每个月的天数。 这是我2月份的更新:

 update [Mart].[dbo].[Time]
 set AmountDayOfMonth = (
     select (count(theMonth)) as kol1 
     from [Mart].[dbo].[Time] as t1 
     where t1.NameMonth = 'February' group by t1.TheYear
 ) 

1 个答案:

答案 0 :(得分:0)

您没有指定问题,但我猜您有一些日历表,其中的列表示每月的总天数。您只需要第二部分。只需将表名和列名更改为适当的值。

数据初始化:

DECLARE @Time TABLE
    (
      TheYear INT ,
      MonthNumber VARCHAR(MAX) ,
      DayNumber INT ,
      AmountDayOfMonth INT
    );
WITH    cte
          AS ( SELECT   CAST('20160101' AS DATE) AS dt
               UNION ALL
               SELECT   DATEADD(dd, 1, dt)
               FROM     cte
               WHERE    DATEADD(dd, 1, dt) < '20170101'
             )
    INSERT  INTO @Time
            ( TheYear ,
              MonthNumber ,
              DayNumber
            )
            SELECT  YEAR(dt) ,
                    MONTH(dt) ,
                    DAY(dt)
            FROM    cte
    OPTION  ( MAXRECURSION 0 );

您需要的更新声明:

WITH    upd
          AS ( SELECT   * ,
                        COUNT(*) OVER ( PARTITION BY TheYear, MonthNumber ) AS cnt
               FROM     @Time
             )
    UPDATE  upd
    SET     AmountDayOfMonth = cnt
SELECT  *
FROM    @Time