Ошибка SL при использовании count (*) в запросе соединения - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь использовать приведенный ниже запрос в хранимой процедуре, чтобы получить все из таблицы продвижения и количество (*) из таблицы Merchant_Views. Но я получаю ошибку "Неверный синтаксис рядом с ключевым словом" из "." Это в SQl Server 2005. Мне интересно, как это можно решить. Что я делаю неправильно. Спасибо за помощь!

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 dbo.Promotion.MerchantID=@MerchantID AND PostType=@PostType

Спасибо !!

Ответы [ 6 ]

1 голос
/ 10 января 2012

Да. Вы ДЕЙСТВИТЕЛЬНО хотели бы использовать группу с агрегацией (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 P.MerchantID=@MerchantID AND PostType=@PostType
group by p.field,p.field2.p.field3,ml.f1,ml.f2,ml.f3,mv.f1,mv.f2,mv.f3
1 голос
/ 10 января 2012
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 P.MerchantID=@MerchantID AND PostType=@PostType

Редактировать

Вы ищете что-то подобное?

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 P.MerchantID=@MerchantID AND PostType=@PostType
--group by --  MV.column1, mv.column2 --and so on..
1 голос
/ 10 января 2012

Вы просто пропускаете 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 PostType=@PostType
  AND MV.ClickDate >= p.startDate 
  AND MV.ClickDate <=  p.expireDate
  AND MV.Status <> 'printed' 
0 голосов
/ 10 января 2012

Вам не хватает 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 dbo.Promotion.MerchantID=@MerchantID AND PostType=@PostType
0 голосов
/ 10 января 2012

Я думаю, что это из-за этого условия в select

(count(*) from Merchant_Views)
0 голосов
/ 10 января 2012

Вам нужен SELECT для внутреннего запроса.

SELECT *, (SELECT count(*) FROM Merchant_Views) FROM dbo.Promotion
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...