2016-07-01 17 views
0

mit Ich habe drei Tabelle ist familycall Tabelle folgt aus:
enter image description here
Aktualisierungsabfrage Daten aus drei Tabellen

und CDR Tabelle ist dies:

enter image description here


und FamilyCallDetail ist dies:

enter image description here


Ich möchte dieses Update-Abfrage schreiben:

update FamilyCallDetail 
where familyCallDetail.Anumber=under select query anumber 
set duration=duration+(
    select anumber,sum(duration) 
    where familyCall.anumber=Cdr.Anumber and FamilyCall.Bnumber=Cdr.Bnumber 

) 


Wie kann ich schreiben, dass die Update-Abfrage durch für jeden?.

+0

Bilder und Screenshots können eine nette Ergänzung zu einem Beitrag sein, aber stellen Sie bitte sicher, dass der Beitrag immer noch klar und nützlich ohne sie ist. Veröffentlichen Sie keine Bilder von Code oder Fehlermeldungen. Kopieren und fügen Sie stattdessen den tatsächlichen Code/die Nachricht direkt in den Beitrag ein. Siehe [Entmutigungs-Screenshots von Code und/oder Fehlern] (http://meta.stackoverflow.com/questions/303812/discourage-screenshots-of-code-and-or-rors) –

+0

Es ist nicht klar, was Sie tatsächlich versuchen machen. Ihre 'UPDATE'-Anweisung versucht, eine 2-Spalten-Ergebnismenge auf einen Skalarwert anzuwenden. Bitte geben Sie die erwarteten Ergebnisse in Ihrer Frage an. –

+0

bitte Postleitzahl als Text eingeben –

Antwort

2

Ich denke, das ist das, was Sie versuchen zu tun:

; 
WITH CTE_Aggregate AS (
    SELECT 
    fc.Anumber, 
    SUM(cdr.Duration) AS Duration 
    FROM FamilyCall AS fc 
    INNER JOIN CDR AS cdr 
    ON cdr.Anumber = fc.Anumber 
    AND cdr.Bnumber = fc.Bnumber 
    GROUP BY fc.Anumber 
) 
UPDATE fcd 
SET fcd.Duration = fcd.Duration + cte.Duration 
FROM FamilyCallDetail fcd 
INNER JOIN CTE_Aggregate AS cte 
    ON cte.Anumber = fcd.Anumber; 
+0

danke mein Freund, bitte warten Sie testen Sie Ihre Lösung –

+0

Danke mein Freund für die Hilfe, Ihre Anfrage ist Arbeit für meinen Zweck, vielen Dank. –

1

Schwer zu sagen, was Sie wirklich tun wollen. Wahrscheinlich das?

update FamilyCallDetail 
where familyCallDetail.Anumber = IN (select query anumber) 
set duration = duration + (
    select sum(duration) 
    FROM Cdr 
     innner join FamilyCall on (
      Crd.Anumber = FamilyCall.Anumber 
      and Cdr.Bnumber = FamiliyCall.Bnumber) 
    where familyCall.anumber=FamilyCallDetail.Anumber 
) 

Es fügt die Dauer aller CDRs zum FamiliyCallDetail, die die gleiche aNumber haben und die einen Eintrag in FamilyCall von aNumber und bNumber verknüpft. Ich bin mir nicht sicher, ob die B-Nummer und der Familienruf tatsächlich relevant sind. Wenn nicht, wird es viel einfacher.