2013-10-17 134 views
0

我想根據此SELECT語句將[A]分配給[學生詳細信息] .group。從選擇語句更新多行

SELECT  TOP (10) PERCENT [Person Id], [Given Names], Surname, Gpa, [Location Cd] 
FROM   [Student Details] 
WHERE  ([Location Cd] = 'PAR') 
ORDER BY Gpa DESC 

我想不出如何在UPDATE語句中使用SELECT語句。 有人可以解釋如何做到這一點?

我使用ASP .NET和MsSQL Server,如果它有所作爲。

謝謝

+0

可能的重複http://stackoverflow.com/questions/2334712/update-from-sel ect-using-sql-server –

+0

你需要更新表格還是僅僅選擇'A'作爲組? – Kaf

+0

當前組爲空..我需要更新組以包含'A'爲從上述查詢返回的所有行 – user2427023

回答

0

試試這個使用CTE(公共表表達式):

;WITH CTE AS 
(
    SELECT TOP 10 PERCENT [Group] 
    FROM  [Student Details] 
    WHERE  ([Location Cd] = 'PAR') 
    ORDER BY Gpa DESC 
) 
UPDATE CTE SET [Group] = 'A' 
+0

降序排序表謝謝,但我得到不正確的語法靠近GROUP和FROM :( – user2427023

+0

至於我沒有語法錯誤可以看到[檢查這個類似的例子](http://sqlfiddle.com/#!3/046e1/3)沒有這樣的語法錯誤。可能是你缺少尖括號''[]''圍繞組是一個關鍵詞 – Kaf

+1

啊你是冠軍,問題是有2個字是BY :) 除此之外,它的工作原理:D 謝謝。 – user2427023

0

這是你想要嗎?

Update top (10) Percent [Student Details] set [group] = 'A' 
where [Location Cd] = 'PAR' AND [group] is null 
+0

沒有抱歉,它必須對基於GPA的行進行排序並且只將group ='A'分配給前10% 感謝您的答覆。 – user2427023

+0

更新了我的答案,請檢查。 –

+0

對不起,仍然無法正常工作..它需要從列'gpa' – user2427023

1

我假設你想更新這些記錄,然後返回他們:

SELECT TOP (10) PERCENT [Person Id], [Given Names], Surname, Gpa, [Location Cd] 
INTO #temp 
FROM [Student Details] 
WHERE  ([Location Cd] = 'PAR') 
ORDER BY Gpa DESC 

update [Student Details] set group='A' where [person id] in(select [person id] from #temp) 

select * from #temp 

我也假設人員ID是學生的詳細信息

+0

感謝您的回覆! :) – user2427023