私は次のようなテーブルを持っています:
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
...
このために合計列全体を上げるのに最も速いのは何ですか?
私は次のようなテーブルを持っています:
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
...
このために合計列全体を上げるのに最も速いのは何ですか?
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)
別の方法
SELECT *,
(SELECT SUM(C)
FROM (VALUES(col1),
(col2),
(col3)) V(C)) AS [Total]
FROM YourTable