如何在SQL中创建一个递增的递增的x记录,其中x对于每一行可能是不同的?
我试图在我的SQL代码中写一个递增的数字,它每x记录递增一次,但是这个x每次都会变化。 我想要的结果是这样的如何在SQL中创建一个递增的递增的x记录,其中x对于每一行可能是不同的?,sql,sql-server,unpivot,row-number,Sql,Sql Server,Unpivot,Row Number,我试图在我的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或无。如果所有变量都没有,我希
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或无。如果所有变量都没有,我希望只有一行(就像用户只写一个变量一样)。这方面的另一个问题是,我正在查询的数据库的主表将xs作为列。由于多种原因,我不得不将它们写成行。另外,使用N1对我来说是不够的,因为(出于其他原因),我需要写一个以这种方式工作的进行式。x是一个NVARCHAR
N1 Var1 Var2 Var3 Date
1 x1 x2 x3 Date1
2 x1 NULL x3 Date2
3 NULL x2 NULL Date3
我希望我说得够清楚了。提前感谢您的帮助
我已经尝试使用日期和x的不同组合使用行编号()
,但没有成功。似乎您需要这样的操作:
SELECT N1, Var, Date
FROM tab
UNPIVOT ( Var FOR lst_Var IN (var1, var2, var3) ) AS unpvt;
这是一个
unpivot
操作。但是,我非常非常喜欢使用交叉应用
,而不是取消应用
<代码>交叉应用实现横向联接,这是SQL标准中包含的一种功能强大的联接操作类型Unpivot
是一种定制语法,只有一种用法。因此:
select t.n1, v.var, t.date
from t cross apply
(values (Var1), (Var2), (Var3)
) v(var)
where var is not null;
您正在寻找
PIVOT
?不,我正在寻找一种方法来生成第一个表中所示的渐进式。谢谢