我有一个表doc_source,其中包含id,document_id和file_name file_name包含各种文件类型,例如* pdf,* dgn,* doc等。我需要编写一个查询,它将提取所有包含* pdf文件和* pdf文件的文档。 换句话说,假设我有以下数据:
ID DOCUMENT_Id FILE_NAME
1 100 abc.pdf
2 100 def.doc
3 200 ghi.pdf
4 300 jkl.pdf
5 300 mno.doc
我想提取所有只有pdf的文档。因此,在这种情况下,我想要一个仅提取Doc Id 200的查询,因为这是唯一一个只有pdf且没有其他文件类型的查询。
我尝试过做这样的事情,但事情显然不太正确:
WITH T1 AS (SELECT DOCUMENT_ID, FILE_NAME FROM DOC_SOURCE)
SELECT DOCUMENT_ID, FILE_NAME FROM DOC_SOURCE AS T2
WHERE FILE_NAME LIKE '%PDF'
GROUP BY DOCUMENT_ID, FILE_NAME
HAVING COUNT(DOCUMENT_ID) = (SELECT COUNT(DOCUMENT_ID) FROM T1)
答案 0 :(得分:0)
我会使用group by
和having
:
select document
from t
group by document
having sum(case when file_name like '%.pdf' then 1 else 0 end) = count(*);
也就是说,以pdf结尾的每个文档的文件名数等于文档总数。