这是我的案例场景;我希望尽量减少我正在经历的步骤。具体来说,我正在使用子表的值更新主表,但是我正在更新子表以了解以前的更新。
无论如何,在我的情况下,我必须聚合两个表中常见的SalesId,然后对所有值进行排序。
AutoTable :
SalesId Value
Joe 10
Rick 5
Jean 8
Bob 19
Julian 12
ManualTable :
SalesId Value WasUpdated
Vick 18
Rick 20
Mary 15
July 11
我需要从两个表中订购所有销售。两个表中都有一个SalesId
(Rick):
Sales Total Auto Manual
Rick 25 5 20
Bob 19 19 0
Vick 18 0 18
Mary 15 0 15
Julian 12 12 0
July 11 0 11
Joe 10 10 0
Jean 8 8 0
为了得到这个结果,我打算使用以下逻辑。如你所见,第3步& 4有点重复;在我的情况下,我正在为Rick的案例更新@DowntimeTable,但后来我正在更新ManualTable,以便我知道我已经处理过Rick并且不需要插入(步骤5)。
某些脚本可能无法正常运行。问题的目的是消除步骤。
-- Create @DowntimeTable table
declare @DowntimeTable table ( Sales varchar(20), Auto int, Manual int, Total int )
-- Add AutoTable to @DowntimeTable
INSERT INTO @DowntimeTable (Sales, Auto) Select sales, auto from AutoTable
-- Update @DowntimeTable.Manual with matching ManualTable.Sales (ie Rick)
Update @DowntimeTable set Manual = ManualTable.Value
from ManualTable inner join @DowntimeTable td on
ManualTable.Sales = @DowntimeTable.sales
-- Set ManualTable.WasUpdate true for rows updated in previous UPDATE (ie Rick)
Update ManualTable
set WasUpdated = 1 from ManualTable inner join @DowntimeTable on
ManualTable.Sales = @DowntimeTable.sales
-- Insert rest of ManualTable
INSERT INTO @DowntimeTable (Sales, Manual)
Select sales, Manual from ManualTable where WasUpdated = 0
UPDATE @DowntimeTable set Total = Manual + Auto
所以,我的问题是:是否可以将步骤3和步骤分组。 4成一个sql脚本?一旦@DowntimeTable更新,可能会自动更新AutoTable吗?
感谢。
答案 0 :(得分:1)
这不是一个非常明确的问题...只需发布代码并添加评论而不是代码评论。
我知道我没有更新任何内容,但起初看起来你只是尝试更新以输出这样的内容?
select
ISNULL(AT.SalesId,MT.SalesId) [Sales],
ISNULL(AT.Value,0)+ISNULL(MT.Value,0) [Total],
ISNULL(AT.Value,0) [Auto],
ISNULL(MT.Value,0) [Manual]
from AutoTable AT
full outer join ManualTable MT ON
AT.SalesId = MT.SalesId