我正在尝试在我的sql代码中编写一个渐进的数字,该编号会增加每个x记录,但是每个x每次都可能变化。我想要这样的结果。
N1 Var Date
1 x1 Date1
1 x2 Date1
1 x3 Date1
2 x1 Date2
2 x3 Date2
3 x2 Date3
var是一个变量,用户可以决定写或留空(在这种情况下,db中的变量值为null(。问题在于用户可以编写的固定数量(在这种情况下为3(,但是他可以决定每个行号填充x1,x2,x3或不填充。对于所有变量都没有的情况,我只想拥有一行(就像用户仅在一个变量上写入一样(。其中的另一个问题是,我要查询的DB的主表将XS作为列。d是由于多种原因,我不得不将它们写为行。同样,使用N1对我来说还不够,因为(由于其他原因(我需要写一个以这种方式工作的渐进式。x是nvarchar。
N1 Var1 Var2 Var3 Date
1 x1 x2 x3 Date1
2 x1 NULL x3 Date2
3 NULL x2 NULL Date3
我希望我足够清楚。预先感谢您的帮助!
我已经尝试使用与日期和x不同组合的ROW_NUMBER()
,但没有成功。
这是unpivot
操作。但是,我非常喜欢使用cross apply
而不是unpivot
。Cross apply
实现了SQL标准中包含的强大的联接操作类型的侧向连接。Unpivot
是只有一种用途的定制语法。所以:
select t.n1, v.var, t.date
from t cross apply
(values (Var1), (Var2), (Var3)
) v(var)
where var is not null;
似乎您需要这样的UNPIVOT
操作:
SELECT N1, Var, Date
FROM tab
UNPIVOT ( Var FOR lst_Var IN (var1, var2, var3) ) AS unpvt;
demo