根據您的使用情況,這可能不是一個好主意。您最好將「Count」創建爲計算列或完全將其從基表中刪除,並創建一個包含count列的視圖。另外,我通常會避免嘗試使用名稱也是保留字的列,如Count。
但是,如果您真的想這樣做,您可以在一個查詢中完成。爲了確保我們在同一頁面上,我相信你只是試圖按照結束時間進行分組,並且帳戶和項目不會被包含在組中(因此,如果相同的關閉時間和不同的項目將被計數) ,但希望能夠僅更新目標帳戶和項目。
在這種情況下,它看起來大致如下
with cte1 as
(select
closetime, COUNT(*) as numCount
from dbo.[statement]
group by closetime)
update dbo.[statement]
set [count] = cte1.numCount
from dbo.[statement] as sd
join cte1
on sd.closetime = cte1.closetime
where
sd.account = <your account num>
and sd.item = <your item>
編輯:
如果我從你想要正確地什麼意見明白,那麼你可以使用這樣的查詢:
with cte1 as
(select
closetime, COUNT(*) as numCount
from dbo.[statement]
group by closetime)
select sd.*, --I normally would advise not using * in production
cte1.numCount as [Count]
from statement as sd
join cte1
on sd.closetime = cte1.closetime
where
sd.account = <your account num>
and sd.item = <your item>
雖然這確實使用CTE,但它是一個單獨的SQL語句,並將顯示sel的計數在他們的結束時間內完成帳戶號碼和項目。
爲什麼您需要將這些冗餘數據存儲在列中?這只是意味着,無論何時插入,刪除或更新行,您都將不斷運行此查詢以保持最新狀態。 – 2012-07-06 21:45:02
因爲我無法在一次選擇中獲得所有內容。這非常困難。 – msavara 2012-07-06 21:48:11
你可以顯示你想要的選擇作爲輸出嗎? – 2012-07-06 21:48:52