2013-01-18 44 views
3

我通常在子查詢中使用COUNT來獲取所需的數字,但在這種情況下,我需要一些幫助,因爲查詢包含的參數太多。需要更復雜的查詢COUNT

SELECT a.[QueueID] 
    ,a.[CouponID] 
    ,a.[ListingID] 
    ,a.[User_ID] 
    ,b.[CouponID] 
    ,b.[ListingID] 
    ,b.[CouponActive] 
    ,b.[CouponExpire] 
    ,b.[IsDeleted] 
    ,c.[ListingID] 
    ,c.[TypeID] 
    ,c.[LevelID] 
    ,@passedUserID as User_ID 

FROM CouponQueue a 
JOIN Coupon b 
    on a.CouponID = b.CouponID 
JOIN Listing c 
    on b.ListingID = c.ListingID 

WHERE (a.[User_ID] = @passedUserID) 
AND (b.[CouponActive] = 1) 
AND (b.[IsDeleted] = 0) 
AND (b.[CouponExpire] > DATEADD(dd, -1, GETDATE()) OR b.[CouponExpire] IS NULL) 

因此可以說這個查詢返回7行的結果。我需要的是我的VIEW的這個數字。所以我想最終的結果限制爲單個行,以便最終我得到:

[TotalCount] <-- Field name 
[7] <-- Result 

但不是7行數據的..我只是需要從上面的查詢次數。仍然堵塞,並試圖學習。我看了其他幾個例子,但是我沒有發現一個具有所有條件的例子......這就是搞砸我的東西。請幫忙!

非常感謝!

回答

3

這會爲你工作嗎?

select count(*) as TotalCOunt from (
SELECT a.[QueueID] /* 
    ,a.[CouponID] 
    ,a.[ListingID] 
    ,a.[User_ID] 
    ,b.[CouponID] 
    ,b.[ListingID] 
    ,b.[CouponActive] 
    ,b.[CouponExpire] 
    ,b.[IsDeleted] 
    ,c.[ListingID] 
    ,c.[TypeID] 
    ,c.[LevelID] 
    ,@passedUserID as User_ID */ 

FROM CouponQueue a 
JOIN Coupon b 
    on a.CouponID = b.CouponID 
JOIN Listing c 
    on b.ListingID = c.ListingID 

WHERE (a.[User_ID] = @passedUserID) 
AND (b.[CouponActive] = 1) 
AND (b.[IsDeleted] = 0) 
AND (b.[CouponExpire] > DATEADD(dd, -1, GETDATE()) OR b.[CouponExpire] IS NULL) 
) t 

您可以刪除計數列。他們實際上並不需要。

+0

嗨戈登!上次你救了我的屁股!太好笑了。很高興再次見到你。我的建議中出現以下錯誤:'CouponID'列多次爲't'指定。 – user1447679

+0

您可以刪除計數的所有列。他們實際上並不需要。 –

+0

再次感謝戈登!我非常感謝你的幫助。 – user1447679

0

應該能夠只需添加COUNT(*):

SELECT COUNT(*) as TotalCount  
FROM CouponQueue a 
JOIN Coupon b 
    on a.CouponID = b.CouponID 
JOIN Listing c 
    on b.ListingID = c.ListingID 
WHERE (a.[User_ID] = @passedUserID) 
AND (b.[CouponActive] = 1) 
AND (b.[IsDeleted] = 0) 
AND (b.[CouponExpire] > DATEADD(dd, -1, GETDATE()) OR b.[CouponExpire] IS NULL) 

好運。