2012-07-06 52 views
-1

我有這個表:enter image description here計數出現的每一行,並更新到新列

我需要算在列CloseTime同一行的發生,寫發生在最後一欄的數量與where子句數項目和相同的帳戶。

我次選擇混凝土項目和帳戶

SELECT CloseTime, COUNT(*) AS CloseTime 
FROM Statement 
WHERE Account = 2013169 AND item = 'eurusd' 
GROUP BY CloseTime 
HAVING COUNT(*) > 1 
ORDER BY COUNT(*) DESC 

有可能在一個更新查詢算?

+1

爲什麼您需要將這些冗餘數據存儲在列中?這只是意味着,無論何時插入,刪除或更新行,您都將不斷運行此查詢以保持最新狀態。 – 2012-07-06 21:45:02

+0

因爲我無法在一次選擇中獲得所有內容。這非常困難。 – msavara 2012-07-06 21:48:11

+0

你可以顯示你想要的選擇作爲輸出嗎? – 2012-07-06 21:48:52

回答

1

根據您的使用情況,這可能不是一個好主意。您最好將「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的計數在他們的結束時間內完成帳戶號碼和項目。

+0

我知道這不是一個好主意。但是我無法在一個查詢中獲得有關多個Count的所有信息。 – msavara 2012-07-06 21:51:17

+1

@nørdic如果我們知道您難以閱讀的屏幕截圖所需的輸出結果,我們可以向您展示如何在單個查詢中獲得結果。想想目標,而不是唯一的方式,你認爲你可以達到目標。有多個人告訴你這是一個糟糕的主意是有原因的,但是你似乎確信自己陷入了糟糕的主意,我不確定我是否理解了原因。 – 2012-07-06 21:54:04

+0

我知道。我的目標是從每個Item和Account列的屏幕截圖CloseTime事件中獲取數據。我很傷心,因爲我試圖去那裏更新CALCULATE。 – msavara 2012-07-06 22:08:34