2017-07-13 56 views
0

我一直在編寫一個SQL查詢以基於類似的ID組捲起多個餘額,並針對標記爲N的產品顯示餘額。我想我需要使用分區函數或最大功能來做到這一點。使用分區的SQL Server聚合

所需結果位於示例數據集下面的表格中。任何人都可以解決這個問題嗎?

有人會知道邏輯來幫助嗎?基本上我需要用ID將所有東西都分組,並且有N個標誌的地方滾動到該記錄的平衡點,如果沒有N標誌的記錄,我們只需通過pdct_Type_C進行聚合。

SELECT
客戶端,
SUM(限制)限制,
SUM(餘額)餘額,
SUM(曝光)曝光,
MAX(CASE WHEN標記= 'N' THEN Pdct_type_c ELSE NULL END)Pdct_type_c,
ID
FROM
GROUP BY客戶端,ID

樣本數據集

 
Client | Limit  | Balance  | Exposure | Pdct_type_c | Flag | ID 
-------------------------------------------------------------------------------- 
John | 60,000,000.00| -    | 5,000,000| DERIV  | N | 2 
John | -   | 1,000,000.00 | -  | FX   | y | 2 
John | -   | 2,000,000.00 | -  | IC   | y | 2 
John | 1,000,000.00 | 3,000,000.00 | -  | DCO   | y | 3 
John | 1,000,000.00 | 3,000,000.00 | -  | DCO   | y | 3 

當前結果

 
Client | Limit  | Balance  | Exposure | Pdct_type_c | Flag | ID 
-------------------------------------------------------------------------------- 
John | 60,000,000.00| 3,000,000.00 | 5,000,000| DERIV  | N | 2 
John | 2,000,000.00 | 6,000,000.00 | -  | NULL  | Y | 3 


期望的結果

 
Client | Limit  | Balance  | Exposure | Pdct_type_c | Flag | ID 
-------------------------------------------------------------------------------- 
John | 60,000,000.00| 3,000,000.00 | 5,000,000| DERIV  | N | 2 
John | 2,000,000.00 | 6,000,000.00 | -  | DCO   | Y | 3 


+0

記錄您需要告訴我們你已經嘗試了什麼。最基本的(假設你的樣本代表了所有的數據),你需要使用GROUP BY,這是一個相當簡單的查詢。你也不應該將數據發佈爲圖片。將它作爲文本包含在實際問題中。請參閱:https://stackoverflow.com/help/how-to-ask – Alex

+1

Thankyou,我發佈了一個基本數據集,其中包含我正在尋找的結果。基本上我希望根據相同的ID彙總組,並將餘額滾動到該組中的客戶端,並將其標記爲'N'。 – Patty

回答

0

這是完全p這可以通過窗口函數來實現。不過這裏是做

的老式方法這說明我們只是有一個N項

SELECT 
ID, 
MIN(Pdct_type_c) Pdct_type_c 
FROM Table 
WHERE Flag = 'N' 
GROUP BY ID 

這外連接到它決定如何組

SELECT 
T.Client, 
SUM(T.Limit) Limit, 
SUM(T.Balance) Balance, 
SUM(T.Exposure) Exposure, 
ISNULL(N.Pdct_type_c, T.Pdct_type_c) Pdct_type_c 
CASE WHEN N.Pdct_type_c IS NULL THEN T.Flag ELSE 'N' END Flag, 
T.ID 
FROM Table T 
LEFT OUTER JOIN 
(
SELECT 
ID, 
MIN(Pdct_type_c) Pdct_type_c 
FROM Table 
WHERE Flag = 'N' 
GROUP BY ID 
) N 
ON T.ID = N.ID 
GROUP BY T.Client, T.ID, 
ISNULL(N.Pdct_type_c, T.Pdct_type_c), 
CASE WHEN N.Pdct_type_c IS NULL THEN T.Flag ELSE 'N' END 
+0

這是我遇到的另一個問題,當沒有'N'的標誌時,如上例所示,我希望其他產品保持原樣或者它們具有相同的pdct_type_c,然後將其聚合爲一條記錄。 客戶端只是一個正常的varchar類型名稱,所以可以是'Ron'或'Greg',ID字段顯示記錄都是同一個事務的一部分,所以如果上面的客戶端的信用額度爲6000萬美元,通過使用單獨的產品(外匯和外匯)降低了該限額的3,000,000美元。我的目標是對DERIV產品獲得3,000,000美元的總額。 – Patty

+0

要做的最好的事情就是編輯你的問題並擴展你的數據例子。從我的理解你的評論,其主要是關於讓案件陳述正確,以挑選出正確的pdct_type_c –

+0

謝謝,我會這樣做前進 – Patty