使用 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)
我有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)