我想第一次获取第一条记录,然后第二条查询获得第二条记录。我使用这两个查询,但他们回到同一件事:试图从表SQL Server中获得前两条记录
SELECT M.CODE,
ISNULL((SELECT TOP 1 *
FROM (
SELECT TOP 1 PRICE AS PRICE FROM MTRLINES ML WHERE ML.MTRL=M.MTRL AND FINDOC IN (SELECT FINDOC FROM FINDOC WHERE SOSOURCE=1251 AND FPRMS IN (1,2)) ORDER BY FINDOC DESC) T
ORDER BY PRICE),0) AS B
FROM MTRL M
WHERE M.SODTYPE=51 AND M.COMPANY=1 AND M.CODE=:kod_an
ORDER BY M.CODE
这得到的第一条记录,然后试图执行这个查询来获取第二个记录:
SELECT M.CODE,
ISNULL((SELECT TOP 1 *
FROM (
SELECT TOP 2 PRICE AS PRICE FROM MTRLINES ML WHERE ML.MTRL=M.MTRL AND FINDOC IN (SELECT FINDOC FROM FINDOC WHERE SOSOURCE=1251 AND FPRMS IN (1,2)) ORDER BY FINDOC DESC) T
ORDER BY PRICE),0) AS B
FROM MTRL M
WHERE M.SODTYPE=51 AND M.COMPANY=1 AND M.CODE=:kod_an
ORDER BY M.CODE
但它返回相同的结果。我仍在学习谢谢!
编辑:
只是一个简单的例子只是为了让这个想法:用户通过可变:kod_an
我有例如两个表:
|MTRL| CODE |
---------------
| 1 | 080109 |
| 2 | 085145 |
| 3 | 084141 |
|MTRL| PRICE | FINDOC |
-------------------------
| 1 | 4.95 | 12345 |
| 1 | 4.50 | 23421 |
| 1 | 3.90 | 23499 |
因此用户搜索的代码(:kod_an)最后两个价格(在我们的示例中为:kod_an=080109
)。我的输出在第一个查询中应该是3.90
,在第二个查询中应该是4.50
。 Findoc应该降序排列,以便选择第一次最后一次,第二次选择第二次这次!
总结我的查询在两种情况下显示3.90。我不知道为什么......
样本数据和预期产出将是真正有用的,但我99%肯定查询是过于复杂。你得到一条记录是因为ISNULL(这两个查询中的(SELECT TOP 1 *',这将限制为1条记录。 – scsimon
)而不是将这些查询转储给我们,您可以编辑您的问题并向我们显示示例表数据以及你想要的输出? –
调查连接。我很确定这是你正在努力完成的一个关于方式。 – scsimon