我正在使用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
有没有人有更好的建议?
答案 0 :(得分:9)
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
答案 1 :(得分:2)
根据您选择的标准选择25.00而不是7.5?
如果它与最大值相关,您可以尝试在该字段上使用 MAX()功能。
如果它与时间顺序最后一行相关,请尝试在日期时间字段中使用 MAX(),如果您有关于它的小时和分钟的详细信息。
答案 2 :(得分:1)
你可以试试这个:
SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id
答案 3 :(得分: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吗?
答案 4 :(得分:1)
首先使用select top 1 |首先*从表格 订单升序 获取最后一个,只需忽略您的订单。
答案 5 :(得分:0)
SELECT TOP 1 charges.mistotal FROM charge其中items.id = charges.id 按订单收费.s DESC
order by子句将确保它以id的顺序返回,而DESC意味着降序,因此它将首先为您提供最大(最新)的值。 TOP 1当然要确保你得到那个。
答案 6 :(得分:0)
对子查询进行排序。如果您想要“最后”值,则需要定义如何确定最后一个项目(请记住,默认情况下,SQL结果集是无序的)。
例如:
(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id
ORDER BY charges.mistotal DESC)
这将返回25.00而不是7.50(来自上面的数据示例),但我假设您希望此值为“最后”,因为它更大。可能还有其他一些领域让你更有意义;例如,您可能有一个时间戳列,您可以对其进行排序以获取最新值而不是最大值。关键是定义“最后”的意思。