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、infoのSr_NO場合は自動的にインクリメントされます。

クエリが機能していません

私は学生で、かなり数か月前にC#を始めました

私の悪い英語でごめんなさい

このエラーが発生しました


集計は、HAVING句または選択リストに含まれるサブクエリに含まれておらず、集計される列が外部参照でない限り、WHERE句に表示されない場合があります。
EXISTSでサブクエリが導入されていない場合、選択リストで指定できる式は1つだけです。

受入番号として101と入力すると、それが必要になります。したがって、この情報が返されます

3   /    101       /    43    /    500
4

3 に答える 3

1

SQL Server共通テーブル式ウィンドウ関数をサポートします。ごとに降順でROW_NUMBER()ランク付けされます。したがって、の値は、あたりの最高値に対して与えられます。SR_NOAccessionNo1SR_NOAccessionNo

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 に答える
1

あなたはおそらくこのようなものが欲しかったでしょう:

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

Circulation列がテーブル内sr_noのすべての値の最大値に等しい行を選択したいですsr_noよね?

于 2013-03-24T17:10:17.847 に答える