SQL Serverで次のことが可能かどうかを知りたいです-カーソルの使用が含まれており、それを関数またはストアドプロシージャ内に配置する方法がわかりません。
あなたは何をお勧めします?
TABLEA
次の列があります。
Column1, Column2
例
Column1 Column2
------- -------
anna a
anna b
ben b
john c
john b
john a
column2 の可能な値は次のとおりです: a、b、および c (Column1 の特定の値の重複はありません)
構造を作成TABLEB
する:Column1 Column3 Column4 Column5.
- のすべての行でカーソルをループさせます。
TABLEA
SELECT * FROM TABLEB WHERE Column1 = (cursor row).Column1
前の選択から行が返されない場合は、列3、4、および 5 に NULL 値を
TABLEB
持つ行を挿入します。Column1 = (cursor row).Column1
(前の選択から返された行数) > 0 の場合:
{ TABLEB.Column3 が null でない場合、TABLEB を (カーソル行).Column2 で更新する
それ以外の場合、TABLEB.Column4 が null でない場合、TABLEB を (カーソル行).Column2 で更新します。
それ以外の場合、TABLEB.Column5 が null でない場合は、TABLEB を (カーソル行).Column2 } で更新します。
END カーソルループ
ご覧のとおり、やりたいことはよくわかっていますが、この場合に推奨される構文や推奨事項はほとんどありません。
出力は次の手順の後にあるはずです。
Column1 Column3 Column4 Column5
------ ------- ------- -------
anna a b
ben b
john c b a
カーソルを使用してもよいかどうかに最も興味があります。そうであれば、構文を学習するためのヒント/チュートリアルはありますか?また、例をプロシージャ/関数に統合することをお勧めしますか?
ありがとうございました!
後で編集:
podiluska、次のようにピボットを使用してみました:
CREATE VIEW VIEWB
AS SELECT [Column1],
('Column2') AS [Source],
MAX( CASE Column2 WHEN 'a' THEN Column2 ELSE '' END ) Column3,
MAX( CASE Column2 WHEN 'b' THEN Column2 ELSE '' END ) Column4,
MAX( CASE Column2 WHEN 'c' THEN Column2 ELSE '' END ) Column5
FROM TABLEA
GROUP BY [Column1];
GO
そのアプローチの問題は、出力が次のようになることでした。
Column1 Column3 Column4 Column5
------ ------- ------- -------
anna a b
ben b
john a b c
最初の目的の出力との違いに気付くでしょう。