2016-06-09 3 views
0

zu verwenden Wie befülle ich tb_1 mit einer einzigen Anweisung, ohne mehrere Updateanweisungen in SQL Server zu verwenden? Dann, wenn die BU mehrere Segmente hat, Verbraucher, Großhandel, usw. & haben sie alle den gleichen Satz von Produkten.Ich möchte eine Tabelle mit Ergebnissätzen aus einer anderen Tabelle aktualisieren, ohne mehrere Updateanweisungen in SQL Server

Nehmen wir an, Sie haben mehr als 10 Produkte.

UPDATE tb_1 
SET CurrYear = (SELECT SUM(CNT) 
       FROM tb_2 
       WHERE PRODUCT_GROUP IN ('Product1') 
       AND SEGMENT Like 'Consumer%' ----(Consumer PP, Consumer Post) 
WHERE Metric = 'Product1' 
AND BU = 'Consumer' 

--- here we add Product2 

UPDATE tb_1 
SET CurrYear = (SELECT SUM(CNT) 
       FROM tb_2 
       WHERE PRODUCT_GROUP IN ('Product2') 
       AND SEGMENT IN ('Business', 'Retail')) 
WHERE Metric = 'Product2' 
AND BU = 'Enterprise' 

----Here We Add Another Product for different Segments 

UPDATE tb_1 
SET CurrYear = (SELECT SUM(CNT) 
       FROM tb_2 
       WHERE PRODUCT_GROUP IN ('Product1') 
       AND SEGMENT IN ('OLO', 'WS')) ---Wholesale = (OLO + WS) 
WHERE Metric = 'Product1 
AND BU = 'Wholesale' 
+0

Vorsichtig, wenn Sie Ihre Frage bearbeiten; Sie haben die gesamte hinzugefügte Codeformatierung entfernt. Es ist viel einfacher, Ihre Frage zu lesen, wenn die Codefragmente in einen Codeblock eingepackt sind. Es bewahrt Abstände, Registerkarten und neue Zeilen. –

Antwort

1

Verwenden Abfrage wie folgt:

UPDATE tb_1 
SET CurrYear = (
       SELECT SUM(CNT) 
       FROM tb_2 
       WHERE PRODUCT_GROUP = tb_1.Metric 
       AND SEGMENT IN ('Business', 'Retail') 
       ) 
WHERE BU = 'Enterprise' 
    -- if you need to filter -- uncomment 
    --AND Metric IN ('Product 1', 'Product 2') 

können Sie Tabellenname oder Alias ​​aus UPDATE verwenden Anweisung.

0

Verwenden Sie häufige Tabellenausdrücke für die Kürze und bessere Lesbarkeit.

WITH cte AS 
(
    SELECT PRODUCT_GROUP, SUM(CNT) AS CNT 
    FROM tb_2 
    WHERE SEGMENT IN ('Business', 'Retail') 
) 
UPDATE tb_1 SET CurYear = cte.CNT 
    FROM tb_1 INNER JOIN cte ON tb_1.Metric = cte.PRODUCT_GROUP 
Verwandte Themen