1

PHPおよびPDOと一緒にWebサイト上の製品にページ付けを実装する目的で、MSSQLを使用してLIMITOFFSETクエリを実装しようとしていますが、次のエラーが発生します:「無効な列名」

私の質問

SELECT OITM.ItemCode,OITM.ItemName,ITM1.Price , 
OITM.CardCode,ROW_NUMBER() OVER (ORDER BY OITM.ItemName DESC) AS RNumber 
FROM OITM INNER JOIN OCRD ON OCRD.CardCode = OITM.CardCode 
INNER JOIN ITM1 ON OITM.ItemCode = ITM1.ItemCode 
WHERE OITM.frozenFor='N' AND PriceList=1 AND U_Publish='Y' 
AND RNumber >= 1 AND RNumber <= 2

ここで何が悪いのかわからない

4

2 に答える 2

2

HAVING句は必要ありません。cte 関数またはサブクエリを使用できます。このような:

;WITH CTE
AS
(
    SELECT OITM.ItemCode,OITM.ItemName,ITM1.Price , 
    OITM.CardCode,ROW_NUMBER() OVER (ORDER BY OITM.ItemName DESC) AS RNumber 
    FROM OITM INNER JOIN OCRD ON OCRD.CardCode = OITM.CardCode 
    INNER JOIN ITM1 ON OITM.ItemCode = ITM1.ItemCode 
    WHERE OITM.frozenFor='N' AND PriceList=1 AND U_Publish='Y' 
)
SELECT
    *
FROM
    CTE
WHERE
    RNumber >= 1 AND RNumber <= 2

または、次のようなサブクエリを使用します。

SELECT
    *
FROM
    (
        SELECT OITM.ItemCode,OITM.ItemName,ITM1.Price , 
        OITM.CardCode,ROW_NUMBER() OVER (ORDER BY OITM.ItemName DESC) AS RNumber 
        FROM OITM INNER JOIN OCRD ON OCRD.CardCode = OITM.CardCode 
        INNER JOIN ITM1 ON OITM.ItemCode = ITM1.ItemCode 
        WHERE OITM.frozenFor='N' AND PriceList=1 AND U_Publish='Y' 
    ) AS t
WHERE
    t.RNumber >= 1 AND t.RNumber <= 2
于 2012-05-04T08:15:56.613 に答える
0

Where条件でneu定義の名前を使用することはできません。HAVING句を挿入する必要があります。

SELECT OITM.ItemCode,OITM.ItemName,ITM1.Price , 
OITM.CardCode,
ROW_NUMBER() OVER (ORDER BY OITM.ItemName DESC) AS RNumber 
FROM OITM INNER JOIN OCRD ON OCRD.CardCode = OITM.CardCode 
INNER JOIN ITM1 ON OITM.ItemCode = ITM1.ItemCode 
WHERE OITM.frozenFor='N' AND PriceList=1 AND U_Publish='Y' 
HAVING RNumber >= 1 AND RNumb
于 2012-05-04T08:11:04.883 に答える