6

私は sybase データベースを使用して、毎日のトランザクション レポートを照会しています。スクリプト内にサブクエリがありました。

ここにそれが行くように:

SELECT orders.accountid ,items.x,etc
(SELECT charges.mistotal FROM charges where items.id = charges.id)
FROM items,orders
WHERE date = '2008-10-02'

ここで、次のようなエラー メッセージが表示されます。

サブクエリは複数の値を返すことはできません

私の値は7.50、25.00です

25.00を返却したいのですが、使用すると

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id)

私の結果は7.50ですが、25.00を返したいです

誰かがより良い提案をしていますか?

4

7 に答える 7

11
SELECT TOP 1 * 
FROM dbo.YourTable 
ORDER BY Col DESC

あなたの場合、私はそれがそうだろうと思います

SELECT TOP 1 charges.mistotal 
FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC
于 2008-10-02T00:13:04.827 に答える
2

7.5 ではなく 25.00 を選ぶ基準は何ですか?

最大値に関連する場合は、そのフィールドでMAX()関数を使用してみてください。

時系列で最後に追加された行に関連している場合、追加された時間と分の詳細がある場合は、datetime フィールドでMAX()を使用してみてください。

于 2008-10-02T00:08:15.480 に答える
1

最初に取得するには、select top 1 | 最初の*テーブルの順序から昇順で最後になります。順序を逆にしてください。

于 2008-10-02T01:00:47.163 に答える
1

したがって、逆の順序を使用できますか:

(SELECT TOP 1 charges.mistotal
    FROM charges
    WHERE items.id = charges.id
    ORDER BY charges.mistotal DESC
)

実際には、明示的な順序を指定していないため、返される結果の順序は定義されておらず、望んでいない答えが得られたのは幸運です。望んでいた答えが得られたとしても、製品化されるまで、必ずしも正しいとは限らないことに気付かなかった可能性があります。

または、次を使用できますか?

(SELECT MAX(charges.mistotal)
    FROM charges
    WHERE charges.id = items.id
)

それとも本当にSUMが欲しかったのですか?

于 2008-10-02T00:19:12.147 に答える
1

これを試すことができます:

SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id
于 2008-10-02T00:09:10.080 に答える
0

サブクエリを並べ替えます。「最後」の値が必要な場合は、どのアイテムが最後に来るかを決定する方法を定義する必要があります (SQL 結果セットはデフォルトで順序付けされていないことに注意してください)。

例えば:

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id 
 ORDER BY charges.mistotal DESC)

これは、7.50 ではなく 25.00 を返します (上記のデータ例から) が、この値が大きいため、この値を「最後」にすることを想定しています。ソートする方が理にかなっている他のフィールドがあるかもしれません。たとえば、タイムスタンプ列があり、それを並べ替えて、最大値ではなく最新の値を取得できます。重要なのは、「最後」の意味を定義することです。

于 2008-10-02T00:14:48.897 に答える
0

上位 1 件の料金を選択します。

order by 句は、id の順序で返されることを確認し、DESC は降順を意味するため、最初に最大 (最新) の値が得られます。もちろんTOP 1は、あなたがそれを確実に手に入れることを保証します。

于 2008-10-02T00:13:36.183 に答える