-1

我需要比较两个表,然后只过滤掉那些没有匹配记录的记录。然后我只需要返回其中的几行。要返回我使用的行...

SELECT  *
    FROM     (SELECT  ROW_NUMBER() OVER (ORDER BY Orderby ASC)
                 AS Row, * FROM vImportFiltered where userid <> @userID)
                AS vImport
    WHERE  Row >= @NumbFrom AND Row <= @NumbTo

对于我使用的记录过滤器...

SELECT * FROM ImportProducts IP 其中 IP.ImpProdNameID = @impProdNameID 和 IP.ImpProdCatID = @ImpProdCatID 和

  NOT EXISTS (SELECT *

           FROM   dbo.ProductDetails PD INNER JOIN
                      dbo.ProductsLU PL ON PD.LUProdSellUseID = PL.LUProdSellUseID
        WHERE
           IP.ImpProductID = PD.ProdImpID AND
           (CONVERT(varchar(36),PL.UserID) = @userID))

两者都是分开工作的,但是当我尝试将它们结合起来时,我得到了错误。

SELECT
    *
FROM
  (SELECT  ROW_NUMBER() OVER (ORDER BY Orderby ASC)
                 AS Row, * ImportProducts IP Where IP.ImpProdNameID = @impProdNameID and IP.ImpProdCatID = @ImpProdCatID 
and    
      NOT EXISTS (SELECT *

           FROM   dbo.ProductDetails PD INNER JOIN
                      dbo.ProductsLU PL ON PD.LUProdSellUseID = PL.LUProdSellUseID
        WHERE
           IP.ImpProductID = PD.ProdImpID AND
           (CONVERT(varchar(36),PL.UserID) = @userID)) as vImport
WHERE  Row >= @NumbFrom AND Row <= @NumbTo

错误:

Msg 102, Level 15, State 1, Line 17 
Incorrect syntax near 'ImportProducts'. 
Msg 156, Level 15, State 1, Line 25 
Incorrect syntax near the keyword 'as'.

我也试过

WHERE
           IP.ImpProductID = PD.ProdImpID AND
           (CONVERT(varchar(36),PL.UserID) = @userID))And Row >= @NumbFrom AND Row <= @NumbTo

我究竟做错了什么?

谢谢

4

1 回答 1

2

你错过了一个FROM

SELECT *
FROM
  (SELECT  ROW_NUMBER() OVER (ORDER BY Orderby ASC) AS Row, * 
    FROM ImportProducts IP -- added your missing FROM
    Where IP.ImpProdNameID = @impProdNameID 
    and IP.ImpProdCatID = @ImpProdCatID 
    and    
      NOT EXISTS (SELECT *
                  FROM   dbo.ProductDetails PD 
                  INNER JOIN dbo.ProductsLU PL 
                    ON PD.LUProdSellUseID = PL.LUProdSellUseID
                  WHERE IP.ImpProductID = PD.ProdImpID 
                    AND (CONVERT(varchar(36),PL.UserID) = @userID)
                  )
  ) as vImport
WHERE  Row >= @NumbFrom 
    AND Row <= @NumbTo
于 2012-05-27T23:24:15.087 回答