2016-11-30 87 views
1

我想知道在SQL中是否可能只顯示一行,然後當該行中的值更改時還顯示另一行。例如,我有一張費用表。費用可以添加到訂單中。當已經添加的費用,更改了費用數量時,原始費用行標記爲刪除,新的費用行添加新的數量。完成此修訂後,舊數量將標記爲DeletedUnverified(StatusId 20),並且新費用數量行將處於Paid(StatusId 7)狀態。然後,主管必須驗證這些費用更改,因此一旦他們這樣做,'deletedUnverified'行的狀態將更改爲已刪除(StatusId 18),新的費用數量行將保持與Paid相同。SQL根據另一行中的值更改而顯示多行

enter image description here

上面的圖象顯示的費用,他們改變了第一時間(頂部兩行)和主管後已經驗證了變化(底部兩行)。前兩行是數據驗證之前的數據(因此statusId = 20是DeletedUnverified)。一旦管理員確定,狀態將變爲18(已刪除)。我想要做的是收費沒有得到驗證時,只顯示一個。所以在上面的圖片中,頂部行,我只想顯示行ID 111(StatusId 20)。一旦費用得到驗證,我想要顯示兩行,即上面的兩行。

我有代碼顯示statusID 20行,然後當它更新到狀態ID 18,它只顯示StatusId 7行,但我不能得到我想要的。我希望這是有道理的。

SELECT 
    * 
FROM 
    FeeItem sub1 
INNER JOIN (
    SELECT 
     ISNULL(b.feeitemid, a.itemid) AS pharmacyformfeeitemid 
    FROM 
     (
      SELECT 
       * 
      FROM 
       FormFeeItem 
      WHERE 
       OrderId IN (1234) 
      AND StatusId = 7 
     ) a 
    LEFT JOIN (
     SELECT 
      * 
     FROM 
      FormFeeItem 
     WHERE 
      OrderId IN (1234) 
     AND StatusId = 20 
    ) b ON a.OrderId = b.OrderId 
) sub2 ON sub1.FeeItemId = sub2.feeitemid 

任何幫助表示讚賞...在此先感謝:)

回答

0
DECLARE @r AS TABLE 
(
    ID INT 
    ,StatusId INT 
    ,OrderId INT 
    ,Cost MONEY 
    ,NoOfFees INT 
) 

INSERT INTO @r 
VALUES 
    (111, 20, 1234, -1.2, 3) 
    ,(123, 7, 1234, 2.4, 6) 

SELECT r1.* 
FROM @r AS r1 
LEFT JOIN @r AS r2 
    ON r1.OrderId = r2.OrderId 
    AND r2.StatusId = 18 
WHERE (r1.StatusId = 7 AND r2.ID IS NOT NULL) 
     OR 
     r1.StatusId IN (18, 20) 

DELETE @r 

INSERT INTO @r 
VALUES 
    (111, 18, 1234, -1.2, 3) 
    ,(123, 7, 1234, 2.4, 6) 

SELECT r1.* 
FROM @r AS r1 
LEFT JOIN @r AS r2 
    ON r1.OrderId = r2.OrderId 
    AND r2.StatusId = 18 
WHERE (r1.StatusId = 7 AND r2.ID IS NOT NULL) 
     OR 
     r1.StatusId IN (18, 20) 
+0

輝煌!工作了一種享受....謝謝! :) – clueless83

相關問題