iT邦幫忙

0

MS SQL 請問該怎指定查詢第幾筆資料!?

MS SQL 請問該怎指定查詢第幾筆資料!?

看到大多數的人都是教怎麼 select 所要的條件資料出來

但似乎查不到有教要怎麼樣, 指定取得table 內 第二筆資料

例如
資料表 t1內有資料如下
name tel addr
john 03 usa
mary 04 jap
grace 03 uk

我該怎指定我要調出 mary 04 jap 的第二筆資料!?

我想要直接指定第二筆的方式, 而不是用where name=mary的方式取得資料

因為之後我要連續撈出資料要設定變數, 但一次我只撈出一筆

看更多先前的討論...收起先前的討論...
CREATE TABLE Table1
    ([name] varchar(5), [tel] int, [addr] varchar(3))
;
    
INSERT INTO Table1
    ([name], [tel], [addr])
VALUES
    ('john', 03, 'usa'),
    ('mary', 04, 'jap'),
    ('grace', 03, 'uk')
;


WITH OrderedTable1 AS
(
    SELECT *,
    ROW_NUMBER() OVER (ORDER BY name) AS RowNumber
    FROM Table1
) 
SELECT *
FROM OrderedTable1
WHERE RowNumber BETWEEN 2 AND 2;
外獅佬 iT邦大師 1 級 ‧ 2015-09-18 08:38:27 檢舉
Row_Number....得搭配排序(ORDER)...
用CURSOR吧....開心開心
對這種我無法理解的需求
簡單達到效果也就是了

週末愉快
唱歌
ORDER BY name => 看到這個我笑了
john 03 usa
mary 04 jap
grace 03 uk
這個 當 ORDER BY name 的第二筆是 grace 喔
假如 第四筆 是 angel 02 cn 那第二筆就是 john 了
基本上 不能 order by name
要絕對的第二筆,一定要讓 TABLE 有個 ID 欄位,這個欄位必須是主 KEY,然後自動產生
這樣,你才能用 TOP 2 然後 ORDER BY ID DESC 的方式找到第二筆
jones888提到:
主 KEY,然後自動產生
這樣,你才能用 TOP 2

推這個 這樣才能真正找到那一筆
不然光是用name=xxx再跳第二筆非常不邏輯而且還是用order by...不就資料完全不能變動增加
嗯......TOP 2.....
4
賽門
iT邦超人 1 級 ‧ 2015-09-18 09:32:45

最簡單的方式是用IDENTITY函數及Temporary Table。

<pre class="c" name="code">DROP Table #temptable;
Select IDENTITY (INT, 1, 1) AS ROW_ID,name,tel,addr into #temptable From t1;
Select name,tel,addr From #temptable Where ROW_ID=2;

上例中的#temptable就是Temporary Table

運用IDENTITY函數有兩個限制:

  1. 必須要用INTO把查詢結果存入另一個Table中,所以利用Temporary Table來當接收器。
  2. 被查詢的Table中,如果有IDENTITY,必須排除在查詢欄位外。

希望對你有幫助。

2
ezdoc
iT邦新手 2 級 ‧ 2015-09-18 15:19:48

試試用 ROW_Number()

<pre class="c" name="code">
SELECT * FROM (
	SELECT *, rowno=ROW_NUMBER() OVER (ORDER BY name asc) FROM t1
) aa WHERE   rowno=2

我要發表回答

立即登入回答