Fal*_*con 2 sql t-sql sql-server sql-server-2005
表的简化版本
Table ActivityHistory:
ActivityHistoryid(PK) | ShipmentID | ActivityCode | Datetime
1 | 1 | CodeA |
2 | 1 | CodeB |
3 | 1 | CodeC |
4 | 2 | CodeA |
5 | 3 | CodeA |
6 | 3 | CodeB |
7 | 4 | CodeC |
Run Code Online (Sandbox Code Playgroud)
此表包含给定货件发生的活动列表.
任务:我需要选择有"CodeA"和没有"CodeC"活动的货件(货件ID).
在此示例中,货件ID 2和3将与条件匹配.
表装运:(装运ID(PK),其他装运相关列)
谢谢.
试试这个 -
查询:
DECLARE @temp TABLE
(
ActivityHistoryid INT
, ShipmentID INT
, ActivityCode VARCHAR(20)
)
INSERT INTO @temp (ActivityHistoryid, ShipmentID, ActivityCode)
VALUES
(1, 1, 'CodeA'),
(2, 1, 'CodeB'),
(3, 1, 'CodeC'),
(4, 2, 'CodeA'),
(5, 3, 'CodeA'),
(6, 3, 'CodeB'),
(7, 4, 'CodeC')
SELECT *
FROM @temp t
WHERE ActivityCode = 'CodeA'
AND NOT EXISTS(
SELECT 1
FROM @temp t2
WHERE t2.ActivityCode = 'CodeC'
AND t2.ShipmentID = t.ShipmentID
)
Run Code Online (Sandbox Code Playgroud)
输出:
ActivityHistoryid ShipmentID ActivityCode
----------------- ----------- --------------------
4 2 CodeA
5 3 CodeA
Run Code Online (Sandbox Code Playgroud)