2017-07-03 5 views
0

私のチームリーダーは、テーブル内にエントリ数のカラムを追加して定期的に更新しなければならないと主張しました。このレコードをカウントするにはcount(*)を使用しますか、直接テーブルにcountカラムを追加しますか?

  1. のようなものは
  2. テイク数欄の値
  3. この

    のように、現在のレコードに

を0.5

  • その値に追加し、カウントレコードを更新前のレコードを取得します。
    • 1.5
    • 2 //私は、これは正しい方法ではないと思われる一方で声明

    を更新し、選択しなステートメントを意味し、新しい値を作成する前の値を取得する必要がありますたびに。私は[Count(*)]を使用してレコードを追加することが簡単な日を表示するためにレコードをカウントすることができます、前のエントリを知るためにupdateコマンドを使用します。パフォーマンスは賢明ですか?どのようにこれを行う?正しい方法は何ですか?

    +5

    質問を編集し、(1)サンプルデータを提供してください。 (2)所望の結果を表形式で表示する。 (3)使用しているデータベースのタグ。あなたの評判を持つ人は、質問をしてフォーマットする方法を知っている必要があります。 –

    +2

    ご質問よりも気になることがありますが、レコードが削除されるとどうなりますか? – doctorlove

    +0

    この値がレコードの数と等しいか、計算可能であることを保証すれば、論理に多すぎる複雑さを追加し、サポート性を悪化させ、将来的にいくつかの問題を引き起こす可能性があるため、保存しません。 Afaik、パフォーマンスはインデックスデータの問題ではありません。 –

    答えて

    1

    私が正しく理解していれば、あなただけのrow_number()が2で割ったい:どんな列がしたいテーブルの順序を指定するため

    select t.*, 
         (row_number() over (order by ??))/2.0 
    from t; 
    

    ??です。

    0

    こんにちはFizan、

    あなたはこの使用して機能を実現することができます。結果の値を取得し、それを更新する関数を作成することができます。このように -

    CREATE function Get_Value_ToBeUpdated 
    RETURN DECIMAL(10,2) 
    AS 
    BEGIN 
        DECLARE result decimal (10,2); 
        DECLARE previousValue decimal (10,2); 
        DECLARE totalCount int; 
    
        SELECT previousValue = SELECT MAX(columnName) FROM YourTable order by primaryColumn desc 
        SELECT totalCount = SELECT COUNT(1) FROM YourTable 
    
        SET result = ISNULL(previousValue,0) + ISNULL(totalCount,0) 
    
        RETURN result; 
    END 
    
    UPDATE YourTable SET COLUMNNAME = DBO.Get_Value_ToBeUpdated() WHERE Your condition 
    

    感謝:)

    1
    UPDATE YourTable 
        SET COUNT_COLUMN = (SELECT MAX(COUNT_COLUMN) + 0.5 
             FROM YourTable 
             ) 
    WHERE "Your condition for the current record"; 
    

    パフォーマンスを向上させるためYourTableのCOUNT_COLUMNカラムにインデックスを追加します。

    関連する問題