2016-03-28 13 views
0

Ich habe Zeit Tabelle mit Spalte AmountDayOfMonth wo Werte NULL ist. Ich muss diese Spalte aktualisieren und Anzahl der Tage für jeden Monat einfügen. Hier ist mein Update nur für Februar:Zählung in Update-Anweisung

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 
) 
+0

MS SQL Server 2014 – Andrey

+1

Ich bin nicht sicher, ob ich verstehe Ihre Frage. Können Sie Ihre Frage so bearbeiten, dass sie einige Beispieldaten und die gewünschte Ausgabe enthält? –

Antwort

0

Sie die Frage nicht angegeben haben, aber ich denke, Sie mit einer Spalte einige Kalender-Tabelle haben die Gesamtzahl der Tage im Monat darstellt. Sie brauchen nur den zweiten Teil. Ändern Sie einfach die Tabellen- und Spaltennamen in die entsprechenden Werte.

Daten Initialisierung:

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); 

Update-Anweisung benötigen Sie:

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