我不知道如何恰当地说出我的问题。我为此道歉。我有一张这样的桌子:
EventId | Item | Type
--------+------+------
1 | 123 | A
2 | 123 | B
3 | 123 | C
4 | 456 | A
5 | 456 | B
我想只选择那些没有C类事件的项目。然后只显示那些项目的B类事件。所以,结果应如下所示:
EventId | Item | Type
--------+------+-------
5 | 456 | B
答案 0 :(得分:1)
这应该可以解决问题......
IF OBJECT_ID('tempdb..#Event', 'U') IS NOT NULL
DROP TABLE #Event;
CREATE TABLE #Event (
EventId INT NOT NULL PRIMARY KEY,
Item INT NOT NULL,
ItemType CHAR(1) NOT NULL
);
INSERT #Event (EventId, Item, ItemType) VALUES
(1, 123, 'A'),
(2, 123, 'B'),
(3, 123, 'C'),
(4, 456, 'A'),
(5, 456, 'B');
--=======================================
SELECT
e1.EventId, e1.Item, e1.ItemType
FROM
#Event e1
WHERE
e1.ItemType = 'B'
AND NOT EXISTS (
SELECT 1
FROM #Event e2
WHERE
e1.Item = e2.Item
AND e2.ItemType = 'C'
);
结果...
EventId Item ItemType
----------- ----------- --------
5 456 B
答案 1 :(得分:0)