如何解决子查询
本文关键字:查询 解决 何解决 | 更新日期: 2023-09-27 18:05:39
我有这样的数据
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
你可能想要这样的东西:
SELECT *
FROM Circulation
WHERE sr_no = (SELECT MAX(sr_no)
FROM circulation
WHERE accessionno = @accessionno)
您想从Circulation
中选择行,其中sr_no
列等于表中所有sr_no
值的最大值 - 对吗?
SQL Server
支持Common Table Expression和Window Function。 ROW_NUMBER()
将按降序排列每个AccessionNo
的SR_NO
。因此,1
的值是针对每AccessionNo
的最高SR_NO
给出的。
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
SELECT TOP 1 *
FROM Circulation
WHERE accessionno = @accessionno
ORDER BY Sr_no DESC
此外,最好不要使用 SELECT *,而是使用列名称。