Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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内部联接和分区以在匹配时获取行号_Sql_Sql Server_Sql Server 2008_Join - Fatal编程技术网

SQL内部联接和分区以在匹配时获取行号

SQL内部联接和分区以在匹配时获取行号,sql,sql-server,sql-server-2008,join,Sql,Sql Server,Sql Server 2008,Join,我有两张桌子。第一个表“a”是第二个表“b”。 我正在编写一个查询,该查询获取表a中的每一行,其中定义了33行,并且内部连接表b,其中encallocation或BackPanLoc与表a中的工作单元匹配 我只想要表B中的一行,它们基于BackPan和EnclLocation进行匹配,但它们不是相同的记录。表b有几行数据被分配给与表a相同的工作单元。我只是试图检索这些额外的行并对其进行分区 I附表a和表b。我还附上了关于Workcell 10的此查询所需的结果,仅作为示例。。。如您所见,表B有4

我有两张桌子。第一个表“a”是第二个表“b”。 我正在编写一个查询,该查询获取表a中的每一行,其中定义了33行,并且内部连接表b,其中encallocation或BackPanLoc与表a中的工作单元匹配

我只想要表B中的一行,它们基于BackPan和EnclLocation进行匹配,但它们不是相同的记录。表b有几行数据被分配给与表a相同的工作单元。我只是试图检索这些额外的行并对其进行分区

I附表a和表b。我还附上了关于Workcell 10的此查询所需的结果,仅作为示例。。。如您所见,表B有4条记录,它们要么是EnclLocation,要么是BackPanLoc=10。但我的结果只显示了相同的DelvNumber 4次。非常感谢您的帮助

表a

表b

错误结果

所需结果仅以工作单元10为例

workcell DelvNumber RowNum


    1   447910-02   1
    2   445710-01   1
    2   445710-01   2
    3   444291-01   1
    3   444291-01   2
    4   447910-03   1
    4   447910-03   2
    5   648020-01   1
    6   647800-02   1
    7   646920-01   1
    7   646920-01   2
    8   644830-4-8  1
    8   644830-4-8  2
    9   443990-01   1
    10  645960-01-03    1
    10  445710-11   2
    10  445710-02   3
    10  445710-09   4
使用的代码

WITH ss 
     AS (SELECT a.*, 
                Row_number() 
                  OVER( 
                    partition BY a.workcell 
                    ORDER BY a.workcell) AS rownum                
         FROM   nwcurrent a 
                INNER JOIN nwdeliverables b 
                        ON b.encllocation = a.workcell 
                            OR b.backpanloc = a.workcell 
         WHERE  ( b.status < 9 
                  AND ( b.encllocation <> 0 
                         OR b.backpanloc <> 0 ) 
                   OR a.delvnumber = '123' )) 
SELECT * 
FROM   ss
复制粘贴格式

1447910-02 1 2 445710-01 1 2 445710-01 2 3 444291-01 1 3 444291-01 2 4 447910-03 1 4 447910-03 2 5 648020-01 1 6 647800-02 1 7 646920-01 1 7 646920-01 2 8 644830-4-8 1 8 644830-4-8 2 9 443990-01 1 10 645960-01-03 1 10 445710-11 2 10 445710-02 3 10 445710-09 4

SQLFiddle

新的尝试

SELECT a.workcell
      ,a.DelvNumber AS A_DelvNumber
      ,b.DelvNumber AS B_DelvNumber
      ,CASE WHEN a.DelvNumber<>b.DelvNumber THEN b.DelvNumber ELSE a.DelvNumber END AS DelvNumber_Resolved
      ,Row_number() OVER(partition BY a.workcell ORDER BY a.workcell) AS rownum
FROM NWCurrent a 
    INNER JOIN NWDeliverables AS b ON b.EnclLocation=a.WorkCell OR b.BackPanLoc=a.WorkCell 
WHERE (b.status <9 AND (b.EnclLocation<>0 OR b.BackPanLoc<>0)OR a.DelvNumber='123')

如果只查找RowNum大于1的对象,则可以使用SELECT tbl.*FROM SELECT WHERE tbl.RowNum>1从ss中查找SELECT*。但可能没那么简单。。我不理解期望的结果:10有什么错?8没有什么错?我只是用10作为我试图返回的示例。我在10的期望结果中有4个不同的行,但是我不正确的表格显示了4个相同的行。我需要显示所有行号,而不仅仅是行数>1OK,我明白了。。。10的结果没有错误,因为第15行中有例如445710-09。但你想看看其他的参考资料。请以可粘贴的格式提供您的样本数据好吗?不确定这是否是您所说的内容不,我想要445710。。。。。这是我想要的结果。。。。。看看我的错误结果表。我有4行相同的工作单元10。。。。我的工作单元10有4个不同的行。我需要这4个不同的行:在您想要的结果中,您不希望看到只有一个外观(如6)的工作单元,您不希望看到具有许多外观的工作单元,只要它们的DelvNumber相等。您只想看到WorkCell 10,因为它有多行,但DelvNumber不同。制作SQLFIDLE以帮助更好地解释。。。几乎doneWorkcell 10在结果中出现4次。。。。但是所有4行的delvnumber都是相同的。。。。这是不正确的。表b有3行,其中enclocation或backpanloc=a.workcell。。。。我还想要那3个不同的DelvNumber。我想要全部4行,或3行,或2或1。。。如果有多行具有不同的DelvNumber,但分配给同一个工作单元。。。我想要它。。。这有帮助吗?@ENGR024,有什么逻辑可以决定,什么时候取一个数字,什么时候取另一个?