Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中创建一个递增的递增的x记录,其中x对于每一行可能是不同的?_Sql_Sql Server_Unpivot_Row Number - Fatal编程技术网

如何在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或无。如果所有变量都没有,我希

我试图在我的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或无。如果所有变量都没有,我希望只有一行(就像用户只写一个变量一样)。这方面的另一个问题是,我正在查询的数据库的主表将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
?不,我正在寻找一种方法来生成第一个表中所示的渐进式。谢谢