現在、私が持っているストアドプロシージャは、データがどのソーステーブル(S1、S2、S3)から来るかに基づいて3つのテーブルを作成します。そうする際にランキング機能を使用して、製品番号と日付に基づいて各レコードをランク付けします。その後、SQL Server - 3つのテーブルを結合してフラグを更新する
SELECT
a.*, b.ProductNumber,
CAST(CASE
WHEN b.ProductNumber = b.NewProductNumber)
THEN 1
ELSE 0
END AS BIT) 'NewProduct',
ROW_NUMBER() OVER (PARTITION BY ProductNumber ORDER BY Date) 'RowNum'
INTO
Table1
FROM
Table2 a
LEFT OUTER JOIN
Table3 b ON a.ID = b.ID and b.Source = 'S1'
SELECT
a.*, b.ProductNumber,
CAST(CASE
WHEN b.ProductNumber = b.NewProductNumber)
THEN 1
ELSE 0
END AS BIT) 'NewProduct',
ROW_NUMBER() OVER (PARTITION BY ProductNumber ORDER BY Date) 'RowNum'
INTO
Table1
FROM
Table2 a
LEFT OUTER JOIN
Table3 b ON a.ID = b.ID and b.Source = 'S2'
SELECT
a.*, b.ProductNumber,
CAST(CASE
WHEN b.ProductNumber = b.NewProductNumber)
THEN 1
ELSE 0
END AS BIT) 'NewProduct',
ROW_NUMBER() OVER (PARTITION BY ProductNumber ORDER BY Date) 'RowNum'
INTO
Table1
FROM
Table2 a
LEFT OUTER JOIN
Table3 b ON a.ID = b.ID and b.Source = 'S3'
これは、1つの集団のテーブルにプールにこのデータをと「ROWNUM」
SELECT
ProductNumber, NewProductNumber,
CAST('Source1' AS VARCHAR(15)) 'SourceName',
NewProduct, RowNum
INTO
CollectiveTable
FROM
Table1
UNION ALL
SELECT
ProductNumber, NewProductNumber,
CAST('Source2' AS VARCHAR(15)),
NewProduct, RowNum
FROM
Table2
UNION ALL
SELECT
ProductNumber, NewProductNumber,
CAST('Source3' AS VARCHAR(15)),
NewProduct, RowNum
FROM
Table3;
UPDATE CollectiveTable
SET NewProduct = 0
WHERE NewProduct = 1
AND RowNum != 1;
に基づいて「NewProduct」フラグを更新し、私はからのレコードで終わるならば私の質問は、CollectiveTable
では、同じ製品で複数のソースが「新製品」と表示されている場合、元のソースのみが「新規」とマークされています。
私は本当にこのためにカーソルを使いたくありません。製品99999のために
例えば、
CollectiveTable
ProductNumber NewProductNumber SourceName NewProduct RowNum
--------------------------------------------------------------------------
99999 99999 Source1 1 1
99999 99999 Source2 1 1
99999 99999 Source3 1 1
00000 00000 Source2 1 1
00000 00000 Source1 1 1
12345 12345 Source3 1 1
12345 12345 Source2 1 1
"オリジナルソースは、" そのため、私は「NewProductを更新したいソース1、00000ソース1、& 12345ソース2
だろう"次のようなレコードのフラグ:
ProductNumber NewProductNumber SourceName NewProduct RowNum
--------------------------------------------------------------------------
99999 99999 Source1 1 1
99999 99999 Source2 0 1
99999 99999 Source3 0 1
00000 00000 Source2 0 1
00000 00000 Source1 1 1
12345 12345 Source3 0 1
12345 12345 Source2 1 1
これについては良い方法がありますか?ご協力いただきありがとうございます。
*ソースがそのように増加し、本当に数値*されていますか?元のソース*をどうやって実際に決めるのですか? – Parfait
同じテーブル名を1回のバッチで2回「SELECT INTO」することはできません。エラーが発生します。 –