使用 where 和 MAX 连接 2 个表

Join 2 tables with where and MAX

我有2个table;

表号

snID SerialNR Unit Version
 1    123     A      A1
 2    456     A      A2

TableDelivery

dID SerialNR Team
 1    456      US
 2    456      GE
 3    456      FI

结果

snID   SerialNR   Unit   Version  Team
 1       123       A       A1
 2       456       A       A2      FI

我需要根据 TableSN and SerialNR 获取 table,列出给出版本的位置。在同一个 table 中,我需要为团队列显示最新输入的 data (= MAX(dID))。当有团队数据可用时,我能够 table 正确显示。

我的查询是这样的

SELECT TableSN.snID, TableSN.SerialNR, TableSN.Unit, TableSN.Version, TableDelivery.Team
FROM TableSN 
     LEFT OUTER JOIN TableDelivery ON TableDelivery. SerialNR = TableSN. SerialNR 
     LEFT OUTER JOIN ( 
         SELECT SerialNR, MAX(dID) AS snRank
         FROM TableDelivery AS TableDelivery _1
         GROUP BY SerialNR
     ) AS NewTeam ON TableDelivery. SerialNR = NewTeam. SerialNR AND TableDelivery.dID = NewTeam.snRank
WHERE (TableSN.Version = @Version)

如何在没有可用团队的情况下 SerialNR 可见?

感谢您的指导和支持。

这是需要的:

[

  DECLARE @Version VARCHAR(5)
SET @Version = 'A1'

     SELECT Ts.snID,ts.SerialNR,ts.Unit,ts.Version,TD.Team FROM @TableSN ts left join @TableDelivery td ON ts.SerialNR = td.SerialNR
     WHERE ts.Version = @Version

     UNION 

     SELECT Ts.snID,ts.SerialNR,ts.Unit,ts.Version,TD.Team FROM @TableDelivery TD left join @TableSN TS ON TD.SerialNR = ts.SerialNR
     WHERE dID = (SELECT MAX(dID) FROM @TableDelivery) 

    **output**

    snID    SerialNR    Unit    Version Team
    1        123         A        A1    NULL
    2        456         A        A2    FI

您需要在 sql 中包含 null 条件,如下所示:

SELECT TableSN.snID, TableSN.SerialNR, TableSN.Unit, TableSN.Version, TableDelivery.Team
FROM TableSN 
LEFT OUTER JOIN TableDelivery ON TableDelivery. SerialNR = TableSN. SerialNR 
LEFT OUTER JOIN (SELECT SerialNR, MAX(dID) AS snRank
                    FROM TableDelivery AS TableDelivery _1
                    GROUP BY SerialNR) AS NewTeam ON (TableDelivery. SerialNR = NewTeam. SerialNR 
                    OR (TableDelivery. SerialNR IS NULL AND NewTeam. SerialNR IS NULL))
                    AND TableDelivery.dID = NewTeam.snRank
WHERE (TableSN.Version = @Version)

试试这个:

SELECT TableSN.snID, TableSN.SerialNR, TableSN.Unit, TableSN.Version, TableDelivery.Team
FROM TableSN 
LEFT JOIN TableDelivery ON TableDelivery.SerialNR = TableSN. SerialNR AND 
                           TableDelivery.dID = (SELECT MAX(dID) 
                                                FROM TableDelivery AS t         
                                                WHERE t.SerialNR = TableSN. SerialNR)
WHERE (TableSN.Version = @Version)