2017-03-17 94 views
-1

我需要幫助,瞭解如何根據兩個附加條件更新SQL Server列中的值,並在「foreach」中包含while(我知道沒有在T-SQL中使用foreach循環)。我設法讓SQL視圖,包含所有涉及到的PARAMS:根據其他列中的複雜條件更新SQL列

SQL View

對不起,沒能拿到表才能正確顯示。

Here you can find a an example

我需要在這個特殊的情況下找到SamAccountNames,這是一個以上組的成員(同一SamAccountName,具有不同組ID),這個SAM比較GroupStartDate並獲得的最早日期。

這個日期我將用於存儲過程來更新指定用戶(SAM)的每個作業。

在這個特殊的例子中:TonyS是兩個組的成員(78和79),所以他有資格獲得支票。當我檢查GroupStartDate時,我發現Tony可以有一份工作,最早從2017-03-06開始(Job with UniqueID1),所以在這種情況下,我需要使用此日期更新Tony的其他工作(Job UniqueID2需要更新)。

我已經搜索並嘗試了很多不同的東西,但到目前爲止我甚至無法接近必須要做的事情。

任何匹配非常感謝。

問候, 託尼

+1

嗨歡迎#1。對於您遇到的任何特定問題,請包括[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。另請閱讀[我如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)。確保你的問題具體而不是過於寬泛。 – Igor

+0

嗨伊戈爾,我可以參考我已經在MS Technet論壇中打開的一個線索,我已經舉了一個特定的例子嗎?這是非常困難的格式表在這裏以適當的方式... –

+1

粘貼表結果到:https://senseful.github.io/web-tools/text-table/,點擊'創建表'按鈕,複製生成表格,粘貼到答案中,格式爲代碼。 – SqlZim

回答

1

你需要做的是通過集團的SamAccountName記錄和獲取的最低GroupStartDate,這將是「最早的」工作開始的第一天。

-- get the ones with more than one groupId 
;with multiple_groups_cte as 
(
    select j.SamAccountName, count(distinct GroupId) nr_groups, MIN(groupstartdate) Earliest_GroupStartDate 
    from #jobs j 
    group by SamAccountName 
    having count(distinct GroupId) > 1 
) 
select SamAccountName, Earliest_GroupStartDate 
from multiple_groups_cte 

該查詢會給你以下結果:

SamAccountName Earliest_GroupStartDate 

GarryT   2017-01-08 00:00:00.0000000 
TonyS   2017-03-06 00:00:00.0000000 
+0

嘿,差不多在那裏..感謝您的意見。唯一需要考慮的是GarryT的工作實際上屬於同一組(GroupID 81)。我只需要檢查Tony的工作,因爲他是唯一一個,擁有兩個不同組的成員。任何建議如何編輯你的例子?十分感謝! –

+0

查詢仍然是一樣的。就我而言,我在我的臨時表中插入了我用來重新創建GarryT的兩條記錄的問題,其中GroupID爲81和82.如果您的GarryT的GroupId也只有81,那麼它應該可以工作。 注意組數是* distinct *。試一試! :) –

+0

嘿,我需要多一點時間來測試。我不會忘記您的意見,並會回覆給您反饋並相應地標記。 Thnaks再次。 –