2013-01-17 61 views
-1

這個問題的標題,因爲我發現很難簡明我想解釋什麼是可能的措辭不當,除了提供一些演示數據。SQL查詢來添加計算字段,比較數據行

我有一個查詢,從SQL表返回以下數據:

ID Job User Amount 

1  101 Bob  100 
2  101 Pete 500 
3  102 Bob  400 
4  102 Pete 200 
5  101 Pete 850 
6  102 Bob  650 

我要的是查詢也返回調用(差)的附加字段,其中包含的金額之間的差額連續輸入同一用戶和作業。因此,我想返回將是作爲數據如下:

ID Job User Amount Diff 

1  101 Bob  100  100 
2  101 Pete  500  500 
3  102 Bob  400  400 
4  102 Pete  200  200 
5  101 Pete  850  350 
6  102 Bob  650  250 

在第一四行中,DIFF是一樣的量,因爲每個是每個用戶的第一個條目每工作(因此的差與計算的參考起始金額零有效)。

最後兩行包含一個用戶名和作業組合已經出現在該表之前的信息,因此DIFF計算如下:

Job 101 User Pete 850 - 500 = 350 
Job 102 User Bob  650 - 400 = 250 

我從來沒有來比較像行數據這在之前的SQL查詢中並不真正知道從哪裏開始。任何幫助將非常感激。

加入

請注意金額不是運行總額。這是定期對每個特定工作中的用戶輸入值進行的主觀評估。金額可能實際上從一次評估下降到下一次評估。我想要的是一個查詢,它返回連續評估「金額」之間的差異。

替代解釋

我正在尋找返回已評估金額的變動歷史記錄。所以另一個例子,在看一個單一的作業和用戶如下:

Job User Amount Movement 

101 Bob  100  100 
101 Bob  500  400 
101 Bob  400  (100) 
101 Bob 1,000  600 

然而,按照最初的例子,將需要從包含大量的就業機會和用戶都混一個表中提取此信息。

+0

什麼版本的SQL Server嗎? – gbn

+0

此外,爲什麼ID = 5金額850但ID = 6金額650?對於ID 5,您已將以前的101,Pete對的金額相加。但對於ID 6,您有當前的金額。這是每對貨品的「第一價值」嗎?或每對「以前的價值」? – gbn

+0

缺少日期/時間列,是否由_ID值的順序來定義_consecutive_? – HABO

回答

3

對於SQL Server 2012,試試這個

這是假定ID = 5的值可能是錯在你的榜樣

對於 「先前值」 每對

DECLARE @t TABLE (ID int, Job int, Username varchar(10), Amount int); 
INSERT @t 
VALUES 
    (1, 101, 'Bob', 100), (2, 101, 'Pete', 500), (3, 102, 'Bob', 400), 
    (4, 102, 'Pete', 200), (5, 101, 'Pete', 850), (6, 102, 'Bob', 650); 

SELECT 
    t1.*, 
    t1.Amount - ISNULL(LAG(Amount) OVER (PARTITION BY Job, Username ORDER BY ID), 0) AS DiffAmount 
FROM 
    @t t1 
ORDER BY 
    t1.ID 

對於 「第一個值」每對

SELECT 
    t1.*, 
    CASE 
     WHEN FIRST_VALUE(t1.ID) OVER (PARTITION BY Job, Username ORDER BY ID) = t1.ID THEN t1.Amount 
     ELSE t1.Amount - FIRST_VALUE(t1.Amount) OVER (PARTITION BY Job, Username ORDER BY ID) 
    END AS DiffAmount 
FROM 
    @t t1 
ORDER BY 
    t1.ID 
+0

這些金額對用戶而言並不是工作總額,因此ID 5和6是正確的。還有一個Date字段(和其他字段),但爲了保持示例數據簡潔,我沒有包含它。 – PJW

+0

@PJW:在源數據中更新爲850. – gbn

+1

儘管有關算術的所有論點,PARTITION和LAG關鍵字是我一直在尋找的,並使我能夠起草解決方案。 – PJW