Geo*_*wdy 0 sql-server t-sql sql-server-2017
我有一个表,我试图只返回 rendition_type Interactive 的记录,而没有其他关联的 rendition_type。如果一个记录有多个 rendition_type,我需要将它从列表中排除。
DOC_ID RENDITION_ID RENDITION_TYPE
001 001 Interactive
001 002 Web PDF
002 003 Interactive
003 004 Interactive
003 005 Print PDF
004 006 Interactive
005 007 Interactive
005 008 Web PDF
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个查询,该查询将仅返回 document_ID 的 Rendition_type 类型仅为 1 且该类型为 Interactive 的行。
这似乎给了你你想要的。
--demo setup
DROP TABLE IF EXISTS DocumentTable;
go
CREATE TABLE DocumentTable
(DOC_ID int, RENDITION_ID int, RENDITION_TYPE varchar(11))
;
INSERT INTO DocumentTable
(DOC_ID, RENDITION_ID, RENDITION_TYPE)
VALUES
(001, 001, 'Interactive'),
(001, 002, 'Web PDF'),
(002, 003, 'Interactive'),
(003, 004, 'Interactive'),
(003, 005, 'Print PDF'),
(004, 006, 'Interactive'),
(005, 007, 'Interactive'),
(005, 008, 'Web PDF')
;
--solution
SELECT *
FROM DocumentTable a
WHERE RENDITION_TYPE = 'Interactive'
AND NOT EXISTS (
SELECT *
FROM DocumentTable
WHERE DOC_ID = a.doc_id
AND RENDITION_TYPE <> 'Interactive'
)
Run Code Online (Sandbox Code Playgroud)
| DOC_ID | RENDITION_ID | RENDITION_TYPE |
|--------|--------------|----------------|
| 2 | 3 | Interactive |
| 4 | 6 | Interactive |
Run Code Online (Sandbox Code Playgroud)