0

我正在尝试从两个表创建一个查询。

第一个表是“文档类型”,第二个表是“文档”文档类型,如果您喜欢一个类别,“文档”包含有关文档本身的详细信息。它们是相关的(即“文档”包含与“文档类型”的关键字段相关的字段)。

简化后,表格如下所示:-

Document Type
=============
TypeID
TypeName
TypeDescription


Document
========
DocumentID
DocumentType (fk of TypeID)
DocumentRequired

我正在运行的查询需要一个 DISTINCT 文档类型列表 - 这是第一个也是最简单的位。

我想要做的是在查询中添加一列,然后在“文档”下查看,如果曾经有任何相关文档的“文档要求”等于 TRUE,则显示 TRUE/Yes 值。如果不是,则显示 FALSE/No。

我已经尝试创建一个连接,但显然如果有任何类别同时包含必需/非必需文档,我会得到重复。我想要的只是一个是/否标志。

有人可以帮忙吗?

4

4 回答 4

1
SELECT dt.TypeID,dt.TypeName,dt.TypeDescription,
    CASE
        WHEN sum(CONVERT(int,ISNULL(d.DocumentRequired,0)))=0 THEN 'False/No'
        ELSE 'True/Yes'
    END [Any required documents]
FROM DocumentType dt
LEFT JOIN Document d on dt.DocumentType=dt.TypeID --terrible naming convention....
group by dt.TypeID,dt.TypeName,dt.TypeDescription
于 2012-10-16T14:58:31.987 回答
0
Select DISTINCT TypeID, 
                TypeName, 
                TypeDescription, 
                CASE WHEN 
                    (select count(*) 
                            from Document 
                            where document.DocumentType = DocumentType.TypeID 
                            and DocumentRequired = 'TRUE'
                    )>0 
                    THEN 'YES' 
                    ELSE 'NO' 
                END AS myYesNoField 
    FROM DocumentType
于 2012-10-16T14:59:22.810 回答
0
SELECT
    TypeID,
    TypeName,
    TypeDescription,
    CASE WHEN NumRequiredDocuments > 0 THEN 'Yes' ELSE 'No' END RequiredDocumentsExist
FROM
(
    SELECT
        DocumentType.TypeID,
        DocumentType.TypeName,
        DocumentType.TypeDescription,
        SUM (CASE WHEN Document.Required <> 0 THEN 1 ELSE 0 END) NumRequiredDocuments
    FROM
        DocumentType
        LEFT JOIN Document ON DocumentType.TypeID = Document.DocumentType
)
GROUP BY
    TypeID,
    TypeName,
    TypeDescription
于 2012-10-16T14:59:32.587 回答
0

给定表中的以下记录: DocumentType

TypeID  TypeName    TypeDescription
1   Type1   1st Type
2   Type2   2nd Type
3   Type 3  3rd Type

文件

DocumentId  DocumentType    DocumentRequired
1       1       0
2       1       1
3       2       0
4       3       1

然后下面的选择会给你你想要的:

SELECT  TypeID, 
        TypeName, 
        TypeDescription, 
        CASE 
            WHEN EXISTS 
                (SELECT * 
                FROM Document 
                WHERE Document.DocumentType = TypeID 
                    AND DocumentRequired = 1) THEN 'True'
            ELSE 'False'
        END AS DocumentRequired
FROM DocumentType
于 2012-10-16T15:13:32.477 回答