これが尋ねられ、ここではすばらしい答えが得られたと確信しています。しかし、それは多くのキーワードに触れるので、私は答えを見つけることができません。
私は基本的にフォームのテーブルを置き換えたい:T-SQL:列の値を効率的に加算する方法
Type amount param note
7 2 str1 NULL
42 12 str2 NULL
128 7 str3 samplenote
42 12 NULL NULL
101 4 str4 NULL
42 12 NULL NULL
7 1 str1 samplenote
128 2 str5 NULL
のようなテーブルを持つ:
すなわちType amount param note
7 3 str1 combined
42 36 NULL combined
128 9 NULL combined
101 4 str4 combined
のparamを宣言しながら、私はそのタイプに基づいて、量パラメータを総括しよう=すべての "不明な"フィールドについてはNULL。
私のpythonの背景で、私はforループアプローチでこのタスクに取り組んでいます。合計金額とnote = 'combined'を持つすべてのタイプに対して新しい行を追加し、残りの行を削除します(下記参照)。私は確かにいくつかのJOINステートメントでより効率的な方法があります。しかし、どのように見えるだろうか?
FYI、これは私が上で働いているソリューションです:私は、キーボードからこの方法をやっている
/*** dbo.sourcetable holds all possible Type values ***/
CREATE PROCEDURE [sumup]
AS
BEGIN
DECLARE @i int = (SELECT TOP (1) Type FROM [dbo].[sourcetable] ORDER BY Type)
DECLARE @MaxType int = (SELECT TOP (1) Type FROM [dbo].[sourcetable] ORDER BY Type DESC)
DECLARE @sum int
BEGIN TRY
WHILE @i <= @MaxType
BEGIN
IF EXISTS (SELECT * FROM [dbo].[worktable] WHERE Type = @i)
BEGIN
SET @sum = (SELECT SUM(amount) FROM [dbo].[worktable] WHERE Type = @i)
BEGIN
WITH cte AS (SELECT * FROM [dbo].[worktable] WHERE Type = @i)
INSERT INTO [dbo].[worktable]
([Type]
,[amount]
,[param]
,[note]
SELECT
cte.Type
,@sum
,cte.param
,'combined'
FROM cte
END
DELETE FROM [dbo].[worktable] WHERE Type = @i AND ISNULL([note],'') <> 'combined'
END
SET @i = @i + 1
END
END TRY
BEGIN CATCH
-- some errorlogging code
END CATCH
END
GO
'param'を計算するためのルールは何ですか? 「不明瞭」とはどういう意味ですか? –
コメントありがとうございます。ここで私が「不明確」と言ったことを説明する文章を追加しました。 –