2012-01-10 120 views
0

我試圖在存儲過程中使用下面的查詢來從Merchant_Views表中獲取Promotion表和count(*)中的所有內容。但是我從「。」中得到錯誤「關鍵字附近的語法錯誤」。這是在SQl Server 2005中。我在想這是如何解決的。我究竟做錯了什麼。感謝所有的幫助!在加入查詢中使用count(*)時出現SL錯誤

SELECT *, (count(*) from Merchant_Views) FROM dbo.Promotion 
INNER JOIN dbo.Merchant_Location ON dbo.Promotion.LocationID = dbo.Merchant_Location.LocationID 
INNER JOIN dbo.Merchant_Views MV ON MV.LocationID = dbo.Promotion.LocationID 
and dbo.Merchant_Views.ClickDate >= dbo.Promotion.startDate 
and dbo.Merchant_Views.ClickDate <= dbo.Promotion.expireDate 
and dbo.Merchant_Views.Status <> 'printed' 
WHERE [email protected] AND [email protected] 

謝謝!

+0

您提到的COUNT(*)部分代碼在哪裏? – 2012-01-10 19:42:45

+0

我的不好!現在查看查詢。謝謝! – Ram 2012-01-10 19:43:12

+1

那該怎麼辦?迄今爲止所有的答案都對我來說是錯誤的。據推測,你正試圖計算與特定「促銷」相關的「Merchant_Views」不僅僅是計數所有這些?你的桌子結構是什麼? – 2012-01-10 19:50:12

回答

1

你只是缺少一個SELECT COUNT(*)

SELECT *, ViewCnt 
FROM dbo.Promotion p 
    INNER JOIN dbo.Merchant_Location ml ON p.LocationID = ml.LocationID 
    INNER JOIN dbo.Merchant_Views mv ON mv.LocationID = p.LocationID 
    INNER JOIN 
    (SELECT p.ID, COUNT(*) AS ViewCnt 
     FROM dbo.Promotion p 
      INNER JOIN dbo.Merchant_Views mv ON mv.LocationID = p.LocationID 
     GROUP BY p.Id) t ON t.ID = p.ID 
WHERE p.MerchantID= @MerchantID AND [email protected] 
    AND MV.ClickDate >= p.startDate 
    AND MV.ClickDate <= p.expireDate 
    AND MV.Status <> 'printed' 
+0

非常感謝Bassam。 – Ram 2012-01-10 23:34:39

0

之前,您需要在內部查詢的SELECT。

SELECT *, (SELECT count(*) FROM Merchant_Views) FROM dbo.Promotion 
... 
0

我想這是因爲ofthis在選擇

(count(*) from Merchant_Views) 
0

你缺少一個SELECT在你內心的SELECT子句:

SELECT *, (SELECT count(*) from Merchant_Views) FROM dbo.Promotion 
INNER JOIN dbo.Merchant_Location ON dbo.Promotion.LocationID = dbo.Merchant_Location.LocationID 
INNER JOIN dbo.Merchant_Views MV ON MV.LocationID = dbo.Promotion.LocationID 
and dbo.Merchant_Views.ClickDate >= dbo.Promotion.startDate 
and dbo.Merchant_Views.ClickDate <= dbo.Promotion.expireDate 
and dbo.Merchant_Views.Status <> 'printed' 
WHERE [email protected] AND [email protected] 
+0

無法綁定多部分標識符「dbo.Merchant_Views.ClickDate」。這是我得到的新錯誤。我必須添加組?謝謝! – Ram 2012-01-10 19:48:08

+0

也許你正在得到thsi錯誤,因爲你正在使用別名dbo.Merchant_Views MV – 2012-01-10 19:50:24

+0

不知道你的表的完整數據結構,我不知道我是否可以幫助你解決這個問題。聽起來像是列名可能是錯的。 – 2012-01-10 19:50:56

1
SELECT *, (SELECT count(*) from Merchant_Views) FROM dbo.Promotion P 
INNER JOIN dbo.Merchant_Location ML ON P.LocationID = ML.LocationID 
INNER JOIN dbo.Merchant_Views MV ON MV.LocationID = P.LocationID 
and MV.ClickDate >= P.startDate 
and MV.ClickDate <= P.expireDate 
and MV.Status <> 'printed' 
WHERE [email protected] AND [email protected] 

編輯

你在找這樣的東西嗎?

SELECT count(P.PromotionID) AS COUNT --, MV.column1, mv.column2 --and so on.. 
FROM dbo.Promotion P 
INNER JOIN dbo.Merchant_Location ML ON P.LocationID = ML.LocationID 
INNER JOIN dbo.Merchant_Views MV ON MV.LocationID = P.LocationID 
and MV.ClickDate >= P.startDate 
and MV.ClickDate <= P.expireDate 
and MV.Status <> 'printed' 
WHERE [email protected] AND [email protected] 
--group by -- MV.column1, mv.column2 --and so on.. 
+0

@Ram你是否試圖獲得與促銷相關的每個商家視圖的計數?如果是這樣,您需要指定列名稱而不是「*」,並且選擇將會不同,並且您應該需要一些分組bys,如果您希望計數 – 2012-01-10 19:55:26

+0

我需要獲取每個PromotionID的行數。我很抱歉的混淆和感謝您的時間糾正我... – Ram 2012-01-10 20:06:49

+0

我想是的,我也需要從Promotion表中得到一切,以及Merchant_Views表中的Count(的PromotionID)。 – Ram 2012-01-10 20:17:24

1

是的你會真的想在這裏使用一個聚合(count())組。

SELECT p.field,p.field2.p.field3,ml.f1,ml.f2,ml.f3,mv.f1,mv.f2,mv.f3, count(mv.*) FROM dbo.Promotion P 
INNER JOIN dbo.Merchant_Location ML ON P.LocationID = ML.LocationID 
INNER JOIN dbo.Merchant_Views MV ON MV.LocationID = P.LocationID 
and MV.ClickDate >= P.startDate 
and MV.ClickDate <= P.expireDate 
and MV.Status <> 'printed' 
WHERE [email protected] AND [email protected] 
group by p.field,p.field2.p.field3,ml.f1,ml.f2,ml.f3,mv.f1,mv.f2,mv.f3 
+0

對那裏的表現感到厭倦---羣組和所​​有連接會想要設置正確的索引。 SELECT *是一件很糟糕的事情,特別是在大型桌子上。我只是警告你。你應該仔細檢查你的執行計劃。 – 2012-01-10 20:08:21

+0

是的,我應該仔細看看。謝謝你的建議Mr.Benner。 – Ram 2012-01-10 20:11:06

相關問題