2017-12-06 1 views
0

Ich möchte Verkaufsjahr bis Datum automatisch die Summe der Rechnung Header entsprechen, wo die Kontocodes gleich sind.SQL Inner Join für berechnete Spalte

ALTER TABLE DEBTORS_MASTER 
    ALTER COLUMN Sales_Year_To_Date AS 
      (SELECT SUM (INVOICE_HEADER.Total_Sell_Amount_Excl_VAT) 
      FROM DEBTORS_MASTER 
      INNER JOIN DEBTORS_MASTER ON INVOICE_HEADER.Account_Code = DEBTORS_MASTER.ACCOUNT_CODE); 

Ich erhalte diesen Fehler

falsche Syntax nahe dem Schlüsselwort 'AS'

+0

Wenn Sie auf 'update' Wert (e) in der Spalte' Sales_Year_To_Date', warum sind Sie mit 'alter'? oder mache ich es falsch? Was ist die Frage? Benötigen Sie den Standardwert für die Spalte 'Sales_Year_To_Date' auf' insert'? – zarruq

+0

Können Sie Ihre Tabellenstruktur zusammen mit einigen Daten anzeigen? –

+0

@zarruq Ich möchte Sales_Year_To_Date automatisch die Summe aus der anderen Tabelle, nicht ein Update. Meine SQL-Anweisung funktioniert. – dylmatthews

Antwort

0

Ich glaube, Sie es separat

Alte Aussage zu tun haben

ALTER TABLE DEBTORS_MASTER 
ALTER COLUMN Sales_Year_To_Date INT 

Update-Anweisung

UPDATE t1 
SET Sales_Year_To_Date = Sales_Year_To_Date 
FROM DEBTORS_MASTER t1 
INNER JOIN (
    SELECT SUM(INVOICE_HEADER.Total_Sell_Amount_Excl_VAT) AS Sales_Year_To_Date 
    FROM DEBTORS_MASTER 
    INNER JOIN DEBTORS_MASTER ON INVOICE_HEADER.Account_Code = DEBTORS_MASTER.ACCOUNT_CODE 
    ) t2 ON t2.ACCOUNT_CODE = t1.ACCOUNT_CODE 
+0

Das Problem mit dem Speichern dieses berechneten Werts (und es ist keine berechnete Spalte oder indizierte Sicht) ist, dass, * sobald die 'UPDATE' ausgeführt wurde *, die Daten möglicherweise veraltet sind. Deshalb empfehlen wir in der Regel * nicht *, Daten zu speichern, die berechnet werden können. –

0

Sie diesen Code verwenden können,

UPDATE DM 
SET Sales_Year_To_Date = IH.sumAmount 
FROM DEBTORS_MASTER AS DM 
INNER JOIN 
    (
     SELECT Account_Code, SUM(Total_Sell_Amount_Excl_VAT) sumAmount 
     FROM INVOICE_HEADER 
     GROUP BY Account_Code 
    ) IH 
ON IH.Account_Code = DM.Account_Code 
+0

Das Problem mit dem Speichern dieses berechneten Werts (und es ist keine berechnete Spalte oder indizierte Sicht) ist, dass * die Daten möglicherweise veraltet sind, sobald das 'UPDATE' ausgeführt wurde *. Deshalb empfehlen wir in der Regel * nicht *, Daten zu speichern, die berechnet werden können. –