Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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 为表中的3列应用行号_Sql_Sql Server_Row Number - Fatal编程技术网

Sql 为表中的3列应用行号

Sql 为表中的3列应用行号,sql,sql-server,row-number,Sql,Sql Server,Row Number,我有一张名为“Temp”的桌子 ItemId JobId Status 1 11 Yes 1 12 No 1 12 Yes 1 13 Yes 2 12 Yes 2 12 Yes 2 11 No 2 13 Yes 2 13 No 2 13 Yes 我的预期输出是,需要根据值

我有一张名为“Temp”的桌子

ItemId  JobId   Status
1       11      Yes
1       12      No
1       12      Yes
1       13      Yes
2       12      Yes
2       12      Yes
2       11      No
2       13      Yes
2       13      No
2       13      Yes
我的预期输出是,需要根据值为这3列(ItemId、JobId、Status)设置序列

产出应为:

iID     iSN     JobId   JobSN   Status  statusId
1       1       11      1       Yes     1
1       2       12      1       No      1
1       3       12      2       Yes     1
1       4       13      1       Yes     1
2       1       12      1       Yes     1
2       2       12      2       Yes     2
2       3       11      1       No      1
2       4       13      1       Yes     1
2       5       13      2       No      1
2       6       13      3       Yes     2

Here iSN needs to set based on ItemId
JobSN based on JobId->ItemId
StatusId based on Status->JobId->ItemId
我知道要在列上设置序列,需要使用ROW_NUMBER()over(partition[ColumnName])对列进行分区。

但是,我怎样才能申请获得预期的产出呢。有人能帮我吗


提前感谢

只有statusId列我不清楚。希望这是一个开始

SELECT ItemId
    , ROW_NUMBER() OVER (PARTITION BY ItemID ORDER BY ItemID) AS iSN
    , JobId
    , ROW_NUMBER() OVER (PARTITION BY JobId, ItemID ORDER BY ItemId) AS iSN
    , Status
FROM @T 
ORDER BY ItemId
结果

+------+----+------+----+-------+
|ItemId|iSN |JobId |iSN |Status |
+------+----+------+----+-------+
|1     |1   |11    |1   |Yes
|1     |2   |12    |1   |No
|1     |3   |12    |2   |Yes
|1     |4   |13    |1   |Yes
|2     |1   |11    |1   |No
|2     |2   |12    |1   |Yes
|2     |3   |12    |2   |Yes
|2     |4   |13    |1   |Yes
|2     |5   |13    |2   |No
|2     |6   |13    |3   |Yes
+------+----+------+----+-------+
试试这个:

SELECT Itemid AS iID
, ROW_NUMBER() OVER (PARTITION BY ITEMID  ORDER BY JobID, STATUS) AS iSN
, JobID
, ROW_NUMBER() OVER (PARTITION BY ITEMID,JobID  ORDER BY JobID, STATUS) AS iSN
, Status
, ROW_NUMBER() OVER (PARTITION BY ITEMID,JobID,STATUS  ORDER BY JobID, STATUS) AS statusid
FROM TEMP;
但你必须按照规则来决定顺序,以获得始终相同的结果:我的结果与你的结果略有不同)


假设您有一列可用于按行排序,则可以执行以下操作:

创建并填充样本表(请在以后的问题中保存此步骤)

查询:

SELECT  ItemId As iID,     
        ROW_NUMBER() OVER(PARTITION BY ItemId ORDER BY id) As iSN,
        JobId,
        ROW_NUMBER() OVER(PARTITION BY JobId, ItemId ORDER BY id) As JobSN,
        [Status],
        ROW_NUMBER() OVER(PARTITION BY [Status],JobId, ItemId ORDER BY id) As statusId
FROM @T
ORDER BY id
结果:

iID     iSN     JobId   JobSN   Status  statusId
1       1       11      1       Yes     1
1       2       12      1       No      1
1       3       12      2       Yes     1
1       4       13      1       Yes     1
2       1       12      1       Yes     1
2       2       12      2       Yes     2
2       3       11      1       No      1
2       4       13      1       Yes     1
2       5       13      2       No      1
2       6       13      3       Yes     2

你的结果毫无意义。请描述输出与输入的关系。似乎您已经知道该做什么,这里的问题是什么?您是否有任何列可用于order by子句?我感觉您不知道在关系数据库中,表是无序的行集。
SELECT  ItemId As iID,     
        ROW_NUMBER() OVER(PARTITION BY ItemId ORDER BY id) As iSN,
        JobId,
        ROW_NUMBER() OVER(PARTITION BY JobId, ItemId ORDER BY id) As JobSN,
        [Status],
        ROW_NUMBER() OVER(PARTITION BY [Status],JobId, ItemId ORDER BY id) As statusId
FROM @T
ORDER BY id
iID     iSN     JobId   JobSN   Status  statusId
1       1       11      1       Yes     1
1       2       12      1       No      1
1       3       12      2       Yes     1
1       4       13      1       Yes     1
2       1       12      1       Yes     1
2       2       12      2       Yes     2
2       3       11      1       No      1
2       4       13      1       Yes     1
2       5       13      2       No      1
2       6       13      3       Yes     2