簡體   English   中英

比較一個表中2個列值的總和與第二個表SQL Server中另一個列的值

[英]comparing sum of 2 column values in one table with another column value in second table sql server

我有兩張桌子

table1(id,item,price)值:

id | item | price
-------------
10 | book | 20  
20 | copy | 30   
30 | pen  | 10

.... table2(id,item,price)值:

id | item | price
-------------
10 | book | 20
10 | book | 30

現在我如果在表1中沒有id-10,item-book和price-(20 + 30)的記錄,那么我想在新表中插入具有sum(20 + 30)的行...

嘗試以下

SELECT T2.id,T2.item,T2.Price as Table2_Price,T1.Price as Table1_Price FROM (
SELECT id,Item,Sum(Price) as Price
FROM Table2
Group BY id,Item ) AS T2 LEFT JOIN Table1 AS T1
ON T1.Item = T2.Item and T1.ID = T2.ID

在讀完注釋后, when sum of these two not equals the one in another table it should return the sum from table 2 ,您需要以下邏輯

SELECT T2.id,T2.Item, CASE WHEN T1.Price IS NULL THEN T2.Price 
                           WHEN T2.Price <> T1.Price THEN T2.Price 
                           ELSE T1.Price END as Price FROM (
SELECT id,Item,Sum(Price) as Price
FROM Table2
Group BY id,Item ) AS T2 LEFT JOIN Table1 AS T1
ON T1.Item = T2.Item and T1.ID = T2.ID

但這邏輯沒有用,因為如果Sum(Table2_price) <> Table1_Price您想選擇Sum(Table2_price)否則當Sum(Table2_price) = Table1_Price您想要Table1_Price 所以您要始終選擇Sum(Table2_Price)

如果我沒有誤解您的要求,可以這樣做:

 SELECT T2.ID, T2.ITEM,T2.SUMPRICE FROM 
 (SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table1 GROUP BY ID, ITEM) AS T1
 INNER JOIN 
 (SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table2 GROUP BY ID, ITEM) AS T2
 ON T1.ID = T2.id  AND T1.item = T2.item WHERE T1.SUMPRICE <> T2.SUMPRICE 

如果已經創建了第三個表,則可以使用INSERT INTO SELECT語句。 否則,您可以像這樣使用SELECT INTO

SELECT T2.ID, T2.ITEM,T2.SUMPRICE as price into table3 FROM 
(SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table1 GROUP BY ID, ITEM) AS 
T1
INNER JOIN 
(SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table2 GROUP BY ID, ITEM) AS 
T2
ON T1.ID = T2.id  AND T1.item = T2.item WHERE T1.SUMPRICE <> T2.SUMPRICE 

希望能幫助到你!

編輯1如果要獲取所有不匹配的行,即:

  1. 表2中ID,商品價格與表1中給定行同時不匹配的行
  2. 表2中的行,其中沒有任何列與表1中的給定行同時匹配

您可以使用EXCEPT語句,例如:

(SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table2 GROUP BY ID, ITEM) 
 EXCEPT
(SELECT ID, ITEM, SUM(PRICE) AS SUMPRICE FROM table1 GROUP BY ID, ITEM) 

返回:

ID   ITEM                 SUMPRICE
---- -------------------- -----------
10   book                 50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM