Sql-Server
替代更新表中的每一行
我下面的語法有效(可能不是最有效的語法,但它幾乎可以達到目的)。我遇到的問題是,當
UPDATE
語句執行時,由於JOIN
條件的原因,符合條件的每一行都會更新。我只想UPDATE
1 行,每empName
. 也許我可以使用該欄位AcctIDWorked
來更新該欄位的 theMAX()
或 theMIN()
?老實說,這兩種方式都沒有關係,因為每次更新我只需要一行。empName
我怎樣才能做到這一點?
DDL 下面和目前語法
IF OBJECT_ID('dbo.__SalesDetailInfo', 'U') IS NOT NULL DROP TABLE dbo.__SalesDetailInfo; IF OBJECT_ID('dbo.__Sales', 'U') IS NOT NULL DROP TABLE dbo.__Sales; Create Table __Sales ( EmpName varchar(max) ,TotalSaleAmount decimal(10,2) ) Insert Into __Sales (EmpName, TotalSaleAmount) Values ('OWT', '167.30'),('Fit D', '512.22'),('Mike', '4147.60') ,('Curtis', '66.96'),('Curtis', '1165.58'),('Curtis', '1507.64') ,('Curtis', '1551.79'),('Curtis', '8132.13'),('Curtis', '28.62') ,('Sam', '499.00'),('Curtis', '1159.76'),('Sam', '2011.98') ,('Mike', '450.00'),('Mike', '1453.60'),('Sam', '762.45') ,('Curtis', '1056.00'),('Mike', '1596.50'),('OWT', '1768.80') ,('Mike', '1200.00'),('Mike', '1500.00'),('Fit D', '17921.30') ,('Curtis', '456.73'),('Curtis', '944.23'),('Curtis', '2242.00') ,('Mike', '437.50'),('Sam', '3258.07'),('Sam', '3258.07') ,('OWT', '7263.57'),('OWT', '7225.57'),('OWT', '224.63') ,('Curtis', '569.89') Create Table __SalesDetailInfo ( EmpName varchar(max) ,TotalSales decimal(10,2) ,AcctIDWorked int ) Insert Into __SalesDetailInfo (EmpName, AcctIDWorked) Values ('Curtis', 1), ('Curtis', 2), ('Curtis', 3), ('Curtis', 4) ,('Fit D', 22), ('Fit D', 11), ('Fit D', 44) ,('Mike', 110), ('Mike', 111), ('Mike', 113), ('Mike', 114) ,('Sam', 300), ('Sam', 310), ('Sam', 340) ,('OWT', 500), ('OWT', 550), ('OWT', 580), ('OWT', 590) ;WITH UPDATECTE AS (Select EmpName, sumTSA=SUM(TotalSaleAmount) FROM __Sales GROUP BY EmpName) UPDATE __SalesDetailInfo SET TotalSales = sumTSA FROM UPDATECTE cte INNER JOIN __SalesDetailInfo t ON RTRIM(LTRIM(cte.EmpName)) = RTRIM(LTRIM(t.EmpName))
select t.*, s.sumTSA from __SalesDetailInfo t join ( Select EmpName, sumTSA = SUM(TotalSaleAmount) FROM __Sales GROUP BY EmpName ) as s ON RTRIM(LTRIM(s.EmpName)) = RTRIM(LTRIM(t.EmpName))
您可以使用它來創建視圖。