差异数据合并是复杂的?如何获得结果?

时间:2014-07-23 15:30:39

标签: sql sql-server tsql set-difference

我正在查看一个旧的存储过程,其工作是根据昨天和今天的数据保留新的排序顺序。

不再保留排序顺序,我已将其缩小到WHERE子句,从而消除所有行。主要目标是保留SortOrder所以如果昨天某些自定义数据位于第4位,任何取代它的新自定义数据也应该位于第4位。

如果我消除

--AND b.PrimaryID = b.SortOrder

然后我获得了数千行。我怀疑有些事情是错的,但我不理解。我怎样才能使这更简单,所以它真的很容易理解?

重要:如果数据不再排序,则SortOrder实际上等于PrimaryID。否则它是增量1 2 3 4 5 6 7 ..,依此类推。我想这是原始建筑师的做法。

-- Merge data and get missing rows that have not changed.
SELECT 
    PrevPrimaryID = a.PrimaryID
    ,a.WidgetID
    ,a.AnotherValue
    ,a.DataID
    ,PrevSortOrder = a.SortOrder
    ,NewPrimaryID = b.PrimaryID
    ,NewDataID = b.DataID
    ,NewStartDate = b.StartDate
    ,NewSortOrder = b.SortOrder
INTO #NewOrder2
FROM #YesterdaysData2 a
LEFT JOIN #TodaysData2 b ON a.WidgetID = b.WidgetID
                         AND a.AnotherValue = b.AnotherValue
WHERE 
   a.Primaryid <> a.sortorder
   AND b.PrimaryID = b.SortOrder

SELECT * FROM #NewOrder2 

-- later update based on #NewOrder2...
UPDATE CustomerData
    SET SortOrder = (
        SELECT PrevSortOrder
        FROM #NewOrder2
        WHERE CustomerData.PrimaryID = #NewOrder2.NewPrimaryID
        )
    WHERE PrimaryID IN (
        SELECT NewPrimaryID
        FROM #NewOrder2
        )

更新 - 是否可能只是一个错误,而WHERE条款应该是

WHERE a.Primaryid <> a.sortorder
AND b.PrimaryID <> b.SortOrder

0 个答案:

没有答案