用于从多值列中提取数据的SQL查询,但前提是它符合特定条件

时间:2015-10-23 20:32:25

标签: sql multivalue

我有一个表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)

1 个答案:

答案 0 :(得分:0)

我会使用group byhaving

select document
from t
group by document
having sum(case when file_name like '%.pdf' then 1 else 0 end) = count(*);

也就是说,以pdf结尾的每个文档的文件名数等于文档总数。