1

我有这样的数据

Sr_No/ AccessionNo  / Roll_nO   / Price
---------------------------------------    
1  /     101     /      45   /     1000
2  /     102        /   46     /   2000
3   /    101       /    43    /    500

我写了这个查询

select * 
from Circulation 
where MAX(sr_no) in (select * 
                     from circulation 
                     where accessionno = @accessionno)

我想获取文本框给出加入号的值,它应该是最大值,Sr_No并且信息Sr_NO自动递增。

我的查询不起作用

我是一名学生,几个月前开始使用 c#

对不起,我的英语不好

我收到了这个错误

聚合可能不会出现在 WHERE
子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。

当我输入 101 作为登录号时,我想要那个。所以它会返回这个信息

3   /    101       /    43    /    500
4

3 回答 3

1

你可能想要这样的东西:

SELECT * 
FROM Circulation 
WHERE sr_no = (SELECT MAX(sr_no)
               FROM circulation 
               WHERE accessionno = @accessionno)

您想从中选择列等于表中所有值的最大值的Circulation行- 对吗?sr_nosr_no

于 2013-03-24T17:10:17.847 回答
1

SQL Server支持公用表表达式窗口函数ROW_NUMBER()将按SR_NO降序排列每个AccessionNo. 因此, 的值1是针对最高的SR_NOper给出的AccessionNo

WITH records
AS
(
    SELECT  Sr_No, AccessionNo, Roll_nO, Price,
            ROW_NUMBER() OVER(PARTITION BY AccessionNo ORDER BY Sr_No DESC) rn
    FROM    Circulation 
)
SELECT  Sr_No, AccessionNo, Roll_nO, Price
FROM    records
WHERE   rn = 1 

但如果一个AccessionNo已经给出,一个简单的TOP就可以完成你的工作。

SELECT   TOP 1 * 
FROM     Circulation 
WHERE    accessionno = @accessionno
ORDER BY Sr_no DESC
于 2013-03-24T17:07:14.160 回答
1
SELECT TOP 1 * 
FROM Circulation 
WHERE accessionno = @accessionno
ORDER BY Sr_no DESC

此外,最好不要使用 SELECT * 而是使用列名。

于 2013-03-24T17:08:25.993 回答