我想知道在 SQL Server 中是否可以执行以下操作 - 它涉及游标的使用,我不确定如何将其放置在函数或存储过程中。
你会推荐什么?
TABLEA
具有以下列:
Column1, Column2
例子
Column1 Column2
------- -------
anna a
anna b
ben b
john c
john b
john a
列 2 中的可能值是:a、b 和 c(列 1 上的某个值没有重复项)
创建TABLEB
结构:Column1 Column3 Column4 Column5.
- 有一个游标循环遍历所有行
TABLEA
SELECT * FROM TABLEB WHERE Column1 = (cursor row).Column1
如果前一个选择没有返回任何行,则在 Columns3、4 和 5 上插入一行到
TABLEB
具有和 NULL 值的值。Column1 = (cursor row).Column1
如果(从先前选择返回的行)> 0:
{ 如果 TABLEB.Column3 不为空,则使用(光标行)更新 TABLEB.Column2
否则,如果 TABLEB.Column4 不为空,则使用(光标行).Column2 更新 TABLEB
否则,如果 TABLEB.Column5 不为空,则使用 (光标行).Column2 更新 TABLEB }
结束光标循环
如您所见,我非常清楚自己想要做什么,但对语法或在这种情况下推荐的内容知之甚少。
输出应在以下步骤之后:
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
您会注意到与第一个输出和所需输出的不同。