Sql server 如果不满足限定符,请在选择中选择最低ID
我有一个查询,根据文档类型提取单个记录。我需要更改它以获取特定“案例”的ID列的最低值,或者如果文档类型为“契约”。可以有多个“契约”记录,我们需要所有这些记录。目前它只提取“主要契约”。我该怎么办Sql server 如果不满足限定符,请在选择中选择最低ID,sql-server,tsql,Sql Server,Tsql,我有一个查询,根据文档类型提取单个记录。我需要更改它以获取特定“案例”的ID列的最低值,或者如果文档类型为“契约”。可以有多个“契约”记录,我们需要所有这些记录。目前它只提取“主要契约”。我该怎么办 SELECT DocIDKey, CaseNumberKey, Grantee, Grantor, DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID, Interest, DocAmt, DocPath
SELECT
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM
Documents
WHERE
(CaseNumberKey = @CaseNumberKey)
AND (DocType = 'Deed')
这个问题有点让人困惑。你说你需要它来提取最低的案例编号,或者任何DocType为“契据”的东西,但是你显示的查询实际上是任何具有请求的案例编号、DocType为“契据”的东西。它根本不看最小值?“主要契约”是什么,@CaseNumberKey来自何方?这是传递给内联函数或过程的参数,还是基于前面的某个内容计算的参数 假设您运行的是2008年或更高版本,请查看over子句,以及MIN函数。也许是像下面这样的
SELECT
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY CaseNumberKey ORDER BY DocIDKey ASC) AS Row_Num,
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM Documents
WHERE CaseNumberKey = @CaseNumberKey AND DocType = 'Deed') sub
WHERE Row_Num = 1
这将为您提供与最低DocIDKey值关联的行,其中CaseNumberKey=提供的值,DocType='Dect'。基本上,它所做的是首先在子查询中按DocIDKey对所有内容进行排序,并根据排序为每行提供一个行号,然后仅筛选排序后的第一行
注意:按CaseNumberKey分区部分是可选的,因为您已经按CaseNumberKey进行了筛选
编辑:查看以下注释后修改版本:
SELECT
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM
(SELECT
ROW_NUMBER() OVER(PARTITION BY CaseNumberKey ORDER BY DocIDKey ASC) AS Row_Num,
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM Documents
WHERE CaseNumberKey = @CaseNumberKey) sub
WHERE Row_Num = 1
UNION SELECT
DocIDKey, CaseNumberKey, Grantee, Grantor,
DocID, DocDate, RecDate, PrimaryDocID, RelatedDocID,
Interest, DocAmt, DocPath, DocType
FROM Documents
WHERE CaseNumberKey = @CaseNumberKey AND DocType = 'Deed'
^这将为您提供第一份文档,即具有最低DocIDKey的文档,以及指定CaseNumberKey类型的所有文档。显示两种情况下的预期输出。您希望为该案例返回1条记录,或者为某个契约返回所有记录?ID是什么?主要契约是如何返回的?VTC请简化您的问题,以提供ddl+dml形式的样本数据和所需结果。绝对需要样本数据和预期结果请阅读有关改进您的问题的一些提示。我不知道从何处开始子查询,因此我给出了我们之前使用的查询。在其他文件名称中有一个“主要契约”,我们过去只使用“主要契约”,但有时“主要契约”不是小于1%的正确文件,因此我们需要将第一份文件添加到案例中,或者在报告中列出所有指定为“契约”的文件,以防标题和多个“契约”混淆控制一个属性。好的。。。我想我明白了我添加了一个新版本-这一版本将为您提供第一个文档,假设第一个文档是具有最低DocIDKey的文档,以及指定CaseNumberKey类型的所有文档。非常感谢!工作完美。由于SSRS不允许使用OVER子句,所以我不得不创建一个存储过程,但它工作得非常好。