2012-03-17 24 views
3

結果の行5〜10を返すには、次のクエリでROW_NUMBER()を使用する必要があります。誰も私が何をする必要があるか私に見せてもらえますか?私は役に立たなかった。誰かが助けることができれば、本当に感謝します。INNER JOINを使用したSQL ROW_NUMBER

SELECT * 
FROM villa_data 
     INNER JOIN villa_prices 
     ON villa_prices.starRating = villa_data.starRating 
WHERE villa_data.capacity >= 3 
     AND villa_data.bedrooms >= 1 
     AND villa_prices.period = 'lowSeason' 
ORDER BY villa_prices.price, 
      villa_data.bedrooms, 
      villa_data.capacity 
+1

これはちょっとした宿題です - あなたは*試したことがありますか?エラーが発生しましたか? 「間違った」結果?あなたは* ROW_NUMBERがページングを実行する正しい関数であることを既に知っています。 –

+0

@Damien_The_Unbeliever彼はクエリを提供しました。申し訳ありませんが、ちょうど合理的になりたいです。これは有効な質問です。 –

答えて

10

フィルタリングするテーブル式には、ROW_NUMBERを貼り付ける必要があります。は、重複して表示される列名starRatingについて不平を言うので、必要な列を明示的に一覧表示する必要があるため、*を使用することはできません。これはとにかくより良い練習です。

WITH CTE AS 
(
SELECT /*TODO: List column names*/ 
     ROW_NUMBER() 
      OVER (ORDER BY villa_prices.price, 
         villa_data.bedrooms, 
         villa_data.capacity) AS RN 
FROM villa_data 
     INNER JOIN villa_prices 
     ON villa_prices.starRating = villa_data.starRating 
WHERE villa_data.capacity >= 3 
     AND villa_data.bedrooms >= 1 
     AND villa_prices.period = 'lowSeason' 

) 
SELECT /*TODO: List column names*/ 
FROM CTE 
WHERE RN BETWEEN 5 AND 10 
ORDER BY RN 
+0

実際には、*:[[RN]、* FROM ...]] [SELECT ROW_NUMBER()OVER(ORDER BY ...)]を使用することができます。 – Learner

+0

...もちろん、一般的に*を使用することはお勧めしません – Learner

+0

@ Cristi - '*'を使用できない理由は、両方のテーブルに 'starRating'というカラム名があり、CTEのカラム名が一意でなければならないからです。 –

0

with句を使用できます。以下を試してみてください

WITH t AS 
(
SELECT villa_data.starRating, 
    villa_data.capacity, 
    villa_data.bedrooms, 
    villa_prices.period, 
    villa_prices.price, 
    ROW_NUMBER() OVER (ORDER BY villa_prices.price, 
     villa_data.bedrooms, 
     villa_data.capacity) AS 'RowNumber' 
FROM villa_data 
    INNER JOIN villa_prices 
    ON villa_prices.starRating = villa_data.starRating 
WHERE villa_data.capacity >= 3 
    AND villa_data.bedrooms >= 1 
    AND villa_prices.period = 'lowSeason' 
) 
SELECT * 
FROM t 
WHERE RowNumber BETWEEN 5 AND 10; 
+0

これは結果を返します。ありがとう!私は質問があります...私はASPからこれを実行できますか?私は標準の "oDatabase.SQL ="を使ってページコードに追加しようとしましたが(SELECT ... "でも行が返っていません)何か不足していますか?これは愚かな質問なら謝罪します –

+0

@JasonEyebe申し訳ありませんが、私はASPに全く慣れていません。 –

関連する問題