我想第一次獲取第一條記錄,然後第二條查詢獲得第二條記錄。我使用這兩個查詢,但他們回到同一件事:試圖從表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