2014-09-22 5 views
-1

это мой запрос:Почему мой запрос не работает?

SELECT [MsgType],sr.ServiceName,content,COUNT(*) AS Occurrence 
FROM [VSReceiveSend].[dbo].[ReceiveBuffer] rb 
    INNER JOIN dbo.Services sr ON rb.ServiceCode=sr.Code 
where MsgType is not null and MsgType = 2 
group by MsgType,CONTEnt, sr.ServiceName 
order by COUNT(*) DESC 

UNION 

SELECT [MsgType],sr.ServiceName,content,COUNT(*) AS Occurrence 
FROM [VSReceiveSend].[dbo].ReceivedSMS rb 
    INNER JOIN dbo.Services sr ON rb.ServiceCode=sr.Code 
where MsgType is not null and MsgType = 2 
group by MsgType,CONTEnt, sr.ServiceName 
order by COUNT(*) DESC 

SQL дает мне эту ошибку: Incorrect syntax near the keyword 'UNION'! в чем проблема?

+0

Что вы пытаетесь достичь? Похоже на довольно обширный запрос? – 2014-09-22 10:36:23

+6

у вас не может быть предложения 'ORDER BY' перед ключевым словом' UNION' –

+0

@JohnWoo как использовать UNION в этом запросе? – pejman

ответ

1

Некоторые комментарии о запросе:

  • Вы, наверное, хотите union all и не union. Если две строки имеют точно такие же три поля, я сомневаюсь, что вы хотите удалить один из них.
  • Ваш пункт where является излишним.

(Это в дополнение к order by проблемы.)

SELECT [MsgType], sr.ServiceName, content, COUNT(*) AS Occurrence 
FROM [VSReceiveSend].[dbo].[ReceiveBuffer] rb INNER JOIN 
    dbo.Services sr 
    ON rb.ServiceCode =s r.Code 
where MsgType = 2 
group by content, sr.ServiceName 
UNION ALL 
SELECT [MsgType], sr.ServiceName, content, COUNT(*) AS Occurrence 
FROM [VSReceiveSend].[dbo].ReceivedSMS rb INNER JOIN 
     dbo.Services sr 
     ON rb.ServiceCode = sr.Code 
where MsgType = 2 
group by MsgType, content, sr.ServiceName 
order by Occurrence DESC; 

Обратите внимание, что это даст вам несколько строк. Если вы хотите получить общее количество, сделайте union all до агрегации:

SELECT MsgType, sr.ServiceName, content, COUNT(*) AS Occurrence 
FROM (select msgtype, servicecode, content 
     from [VSReceiveSend].[dbo].[ReceiveBuffer] rb 
     where MsgType = 2 
     union all 
     select 
     from [VSReceiveSend].[dbo].ReceivedSMS rb 
     where MsgType = 2 
    ) rb INNER JOIN 
    dbo.Services sr 
    ON rb.ServiceCode = sr.Code 
group by MsgType, content, sr.ServiceName 
order by Occurrence DESC; 
+0

Большое спасибо за ваш полный ответ, мой друг. – pejman

1

Вы не можете иметь предложение ORDER BY перед ключевым словом UNION.

Если вы хотите заказать по записи набора, а также COUNT (*) вы можете добавить колонку, как это:

SELECT [MsgType],sr.ServiceName,content,COUNT(*) AS Occurrence, 1 AS recordset_order 
FROM [VSReceiveSend].[dbo].[ReceiveBuffer] rb 
    INNER JOIN dbo.Services sr ON rb.ServiceCode=sr.Code 
where MsgType is not null and MsgType = 2 
group by MsgType,CONTEnt, sr.ServiceName 
UNION 
SELECT [MsgType],sr.ServiceName,content,COUNT(*) AS Occurrence, 2 AS recordset_order 
FROM [VSReceiveSend].[dbo].ReceivedSMS rb 
    INNER JOIN dbo.Services sr ON rb.ServiceCode=sr.Code 
where MsgType is not null and MsgType = 2 
group by MsgType,CONTEnt, sr.ServiceName 
order by recordset_order ASC, COUNT(*) DESC 
+0

Как использовать UNION в этом запросе? – pejman

+0

обновил ответ – Bulat

Смежные вопросы