如何在SQL中进行渐进式,以增加每个x记录x可能会在每一行中有所不同



我正在尝试在我的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而不是unpivotCross 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

相关内容

  • 没有找到相关文章

最新更新