1

フィールド「ファクター」のテーブル全体に対して更新を実行する方法を見つけようとして立ち往生しています。

「要因」は、同じ「場所」と「日付」を持つ繰り返しレコードの数によって決定されます。

係数計算表があります:

Location - Count - Factor
   X     -   1    -   1.0
   X     -   2    -   0.8
   X     -   3+    -  0.5

私を助けてください!

4

2 に答える 2

2

これを試して:

UPDATE A
SET Factor = CASE WHEN B.N = 1 THEN 1.0
             WHEN B.N = 2 THEN 0.8
             WHEN B.N >= 3 THEN 0.5 END
FROM YourTable A
INNER JOIN (SELECT Location, COUNT(*) N
            FROM YourTable
            GROUP BY Location) B
    ON A.Location = B.Location

別の方法:

;WITH CTE AS
(
    SELECT *, COUNT(*) OVER(PARTITION BY Location) N
    FROM YourTable
)
UPDATE CTE
SET Factor = CASE WHEN N = 1 THEN 1.0
             WHEN N = 2 THEN 0.8
             WHEN N >= 3 THEN 0.5 END
于 2013-01-25T20:53:54.073 に答える
0

OVER 句で派生テーブルを使用する

UPDATE x
SET x.Factor = x.NewFactor
FROM (   
      SELECT Factor,
             CASE COUNT(*) OVER (PARTITION BY Location, [date]) 
               WHEN 1 THEN 1.0 
               WHEN 2 THEN 0.8 
               ELSE 0.5 END AS NewFactor               
      FROM dbo.test30
      ) x

SQLFiddle のデモ

于 2013-01-25T21:58:28.663 に答える