2012-03-30 51 views
-2

我正在一个项目中,我需要得到有限的结果之前的总行数。我有这个工作在MySQL中,但我需要它在SQL Server中工作。SQL Server @@ rowcount之前

我知道我可以用更多的时间来解决这个问题,但我很累,而且我还需要做很多其他的工作。任何帮助将不胜感激。

这里是我的查询:

WITH filter 
    AS (SELECT "order"."amount", 
       "order"."id", 
       "status", 
       "priority", 
       "poNum", 
       "ip", 
       "customer"          AS 'cID', 
       "customer"."firstName", 
       "customer"."lastName", 
       "date", 
       "shippingMethod", 
       "site" + ':' + Isnull("admin", '')    AS "site", 
       "displayedCurrency", 
       "address"."country", 
       Isnull((SELECT COUNT("rma"."id") 
         FROM "rma" 
         WHERE "rma"."order" = "order"."id" 
         GROUP BY "rma"."order"), 0)   AS rma, 
       Row_number() OVER (ORDER BY "order"."id" DESC) AS rownum, 
       Isnull((SELECT COUNT("order") 
         FROM order_comment 
         WHERE "order" = "order"."id" 
         GROUP BY "order"), 0)     AS COMMENT 
     FROM "order" 
       LEFT JOIN "customer" 
        ON "customer"."id" = "order"."customer" 
       LEFT JOIN "address" 
        ON "address"."id" = "order"."sAddress") 
SELECT * 
FROM "filter" 
WHERE "rownum" BETWEEN 0 AND 10 
ORDER BY filter."id" DESC 

SELECT @@ROWCOUNT AS 'cnt' 
+0

@sll谢谢格式化。 – 2012-03-30 21:02:51

+1

使用http://www.dpriver.com/pp/sqlformat.htm对未来的帖子 – sll 2012-03-30 21:08:20

+0

谢谢,书签。 – 2012-03-30 21:10:07

回答

2

回答了我自己。

我在计数(*)后使用了over() clause。我不知道这是否是最好的解决方案,但它对我有用。


WITH filter 
    AS (SELECT count(*) over() AS 'cnt', 
       "order"."amount", 
       "order"."id", 
       "status", 
       "priority", 
       "poNum", 
       "ip", 
       "customer"          AS 'cID', 
       "customer"."firstName", 
       "customer"."lastName", 
       "date", 
       "shippingMethod", 
       "site" + ':' + Isnull("admin", '')    AS "site", 
       "displayedCurrency", 
       "address"."country", 
       Isnull((SELECT COUNT("rma"."id") 
         FROM "rma" 
         WHERE "rma"."order" = "order"."id" 
         GROUP BY "rma"."order"), 0)   AS rma, 
       Row_number() OVER (ORDER BY "order"."id" DESC) AS rownum, 
       Isnull((SELECT COUNT("order") 
         FROM order_comment 
         WHERE "order" = "order"."id" 
         GROUP BY "order"), 0)     AS COMMENT 
     FROM "order" 
       LEFT JOIN "customer" 
        ON "customer"."id" = "order"."customer" 
       LEFT JOIN "address" 
        ON "address"."id" = "order"."sAddress") 
SELECT * 
FROM "filter" 
WHERE "rownum" BETWEEN 0 AND 10 
ORDER BY filter."id" DESC 
 
+0

请解释一下你对路人的回答 – 2012-03-30 22:01:10