0

私は次のようなテーブルを持っています:

col1 col2 col3 total
3    5    6
7    8    null
...

合計列を、のそれぞれのcol1、col2、col3の合計にします。したがって、この場合、合計は次のようになります。

col1 col2 col3 total
3    5    6    14
7    8    null 15
...

このために合計列全体を上げるのに最も速いのは何ですか?

4

2 に答える 2

4
select col1, col2, col3, 
       isnull(col1,0) + isnull(col2,0) + isnull(col3,0) as total
from tableName

その列を実際にテーブルの一部にしたい場合は、計算列にするのが最善の策です。これにより、行の残りの部分と同期しなくなるのを防ぎますが、selectステートメントの他の列と同じように扱うことができます。

これを行うcreatetableステートメント:

CREATE TABLE [dbo].[tableName](
    [col1] [int] NULL,
    [col2] [int] NULL,
    [col3] [int] NULL,
    [total]  AS ((isnull([col1],0)+isnull([col2],0))+isnull([col3],0))
)

または、SSMSでテーブルデザイナーに移動し、列を選択して、[式]というタイトルのボックスtotalに式を貼り付けます。isnull([col1],0)+isnull([col2],0))+isnull([col3],0)computed column specification > formula

最後に、本当にテーブルの合計列を埋め戻したい場合(しないでください!悪い考えです。後で誰かがcol1、2、または3を更新し、合計を更新するのを忘れると、データが同期しなくなります)、更新を使用してください。

UPDATE tableName
SET total = isnull([col1],0)+isnull([col2],0))+isnull([col3],0)
于 2012-05-24T09:09:12.497 に答える
3

別の方法

SELECT *, 
       (SELECT SUM(C) 
        FROM   (VALUES(col1), 
                      (col2), 
                      (col3)) V(C)) AS [Total] 
FROM   YourTable 
于 2012-05-24T09:12:13.617 に答える