2017-09-21 68 views
0

https://i.stack.imgur.com/GEwk3.pngSQL標誌最大值

我有一個表(#UPDATE圖片)含有subscriber_IDs,總,Tax_id和DOS。總數是用戶在同一服務日期DOS支付給tax_id位置的訪問次數。我正在嘗試創建另一列,將1賦予具有最高訪問權限的tax_id,將0賦予同一訂戶和DOS的所有其他Tax_id。我有許多不同的用戶,所以我需要一個通用代碼,圖片描述了一個只有一個用戶的例子。

期望的最終結果列MM(期望的結果圖片)

https://i.stack.imgur.com/Fkgx7.png

SELECT SUBSCRIBER_ID, Total, TAX_ID, DOS, 
case WHEN Total = max(Total) then 1 ELSE 0 END as MM 
FROM #Update3 
GROUP BY SUBSCRIBER_ID, PAY_TO_PROVIDER_TAX_ID, DOS, Total 

這是我有,但它返回一個在MM列的每一行,而我只在需要1共有3行,所有其他行都爲0。我需要這個工作在不同用戶的列表上,其中包含不同的tax_id和服務日期。

+0

您正在按所有列進行分組,因此您的案例表達式將始終返回第一個輸出。您可能需要在這裏使用子查詢或cte。 –

+0

您是否需要查詢一個用戶(param subscriber_id)或所有按用戶分組?我希望你不想在表格中保存這個標誌,因爲它是一個計算的字段!? – Nikolaus

回答

1

我認爲你需要沿着這些路線。

with MyTotal as 
(
    select MaxTotal = MAX(Total) 
    from #Update3 
) 

SELECT SUBSCRIBER_ID 
    , Total 
    , TAX_ID 
    , DOS 
    , case WHEN Total = mytot.MaxTotal then 1 ELSE 0 END as MM 
FROM #Update3 
cross join MyTotal 
+0

我認爲xoxotolu希望每個訂閱者的最大(總數)不是整個表格。 – Nikolaus

+0

@Nikolaus,這不是它在期望的輸出中看起來像什麼。 –

+0

工作完美,謝謝! – xoxotolu