2013-05-07 100 views
0

我試圖爲部門表中的每個部門獲取一個最新的Approved風險評估(它是bit列)。使用SQL,從表中爲關聯的外鍵表中的每個關聯記錄選擇單個記錄

我也需要所有部門的所有風險評估,但我想我可能會這樣做,作爲單獨的查詢或聯合兩個結果集。

下面是我的模式的簡化版本,它的價值。

Department to RiskAssement table diagram

+3

你到目前爲止?問題是什麼?或者你只是想讓別人做你的工作? – Oscar 2013-05-07 13:00:30

+2

我喜歡有人來做我的工作,你提供?不要以爲我只是在等待某個人回覆我的拇指,我一直在尋找,最後幾次在SO上回答我自己的問題。我真的不記得從哪裏開始,這是一段時間,因爲我不得不這樣做。當我記不起適合谷歌的條款時,很難讓自己開始。我懷疑我必須用一個子查詢來完成,但這只是我所能得到的。 – BenCr 2013-05-07 13:08:14

+0

FWIW上次我不得不這樣做時,公用表表達式甚至不存在,即使我記得我沒有找到答案。 – BenCr 2013-05-07 13:21:58

回答

1

如果您有SQL 2005或更高版本,你可以用一個CTE來實現這個

with cte as (
    select row_number() over (partition by DeptId, order by Submitted desc) as row, 
    id, 
    DeptId, 
    RiskAssessment, 
    Submitted, 
    Approved 
    from RiskAssesment where approved = 1 
) 

select 
    id, 
    deptid, 
    RiskAssessment, 
    Submitted, 
    Approved 
    from cte where row = 1 
+0

@Oscar感謝您的糾正,我永遠不會記得哪個版本提供了哪個! – 2013-05-07 16:00:05

+0

你先生......剛剛救了我的培根。非常感謝你,奧斯卡和本! – 2013-05-22 15:57:16

0

要獲得latest Approved任務,您將需要存儲到列RiskAssessment審批時間,那麼你可以使用按組和最大值獲得預期結果。

對於第二部分

所有各部門 我認爲它時便會更容易沒必要的子查詢未獲批准的風險評估。

Select DEPTID, id where Approved=0 

如果這不是你的意思,我想我不明白你的問題很好。