2014-09-22 40 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

你在'UNION'关键字之前不能有'ORDER BY'子句 – 2014-09-22 10:36:56

+0

@JohnWoo如何在这个查询中使用UNION? – pejman 2014-09-22 10:48:04

回答

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 2014-09-23 06:54:53

1

UNION关键字前面不能有ORDER BY子句。

如果要通过设置以及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 2014-09-22 10:48:32

+0

更新了答案 – Bulat 2014-09-22 10:51:26