-1

私はこのテーブルを持っています:ここに画像の説明を入力してください

CloseTime列の同じ行の出現回数をカウントし、最後の列の出現回数をItemと同じアカウントの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つの更新クエリでカウントすることは可能ですか?

4

1 に答える 1

1

ユースケースによっては、これはおそらく良い考えではありません。「カウント」を計算列として作成するか、ベース テーブルから完全に除外して、カウント列を含むビューを作成することをお勧めします。また、Count のように、予約語でもある名前の列を持つことは一般的に避けます。

ただし、本当にやりたい場合は、1 つのクエリで実行できます。私たちが同じページにいることを確認するために、あなたは閉店時間だけでグループ化しようとしていたと思います。アカウントとアイテムはグループに含まれません(したがって、同じ閉店時間で別のアイテムの場合はカウントされます) 、しかし、対象のアカウントとアイテムのみを更新できるようにしたい。

その場合、おおよそ次のようになります

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 ステートメントであり、選択したアカウント番号とアイテムのカウントをクローズタイムまでに表示します。

于 2012-07-06T21:48:58.847 に答える