我有这样的数据
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
答案 0 :(得分:1)
SQL Server
支持公用表表达式和窗口函数。 ROW_NUMBER()
会按SR_NO
的降序排列AccessionNo
。因此1
的价值是SR_NO
每AccessionNo
个最高{/ p}}。
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
答案 1 :(得分:1)
SELECT TOP 1 *
FROM Circulation
WHERE accessionno = @accessionno
ORDER BY Sr_no DESC
此外,最好不要使用SELECT *而是使用列名。
答案 2 :(得分:1)
你可能想要这样的东西:
SELECT *
FROM Circulation
WHERE sr_no = (SELECT MAX(sr_no)
FROM circulation
WHERE accessionno = @accessionno)
您想要从Circulation
中选择sr_no
列等于表格中所有sr_no
值的最大值的行 - 对吗?