2011-07-07 56 views
1

嗨任何一个可以给我解释一下什么毛病我查询SQL Server查询语法问题

SELECT  
    cDispatcherName AS Name, 
    cCallNature AS EmergencyCall, 
    COUNT(cCallNature) AS Total, 
    (
     SELECT 
      COUNT(cCallNature) 
      FROM CallInfo 
      WHERE (cCallNature ='Regular call') 
     GROUP BY cCallNature 
    ) AS Expr1 
FROM   CallInfo 
WHERE  (cCallNature = 'Emergency call') 
GROUP BY cDispatcherName, cCallNature 

给出了这样的错误消息:

Errormsg::There was an error parsing the query. [ Token line number = 1,Token line offset = 93,Token in error = SELECT ]

+1

您是否收到任何错误消息? –

+0

似乎有效的语法。问题是什么? –

+0

Yes.My querySELECT cDispatcherName AS Name,cCallNature AS EmergencyCall,COUNT(cCallNature)AS Total,(SELECT COUNT(cCallNature)FROM CallInfo WHERE cCallNature ='Regular call'GROUP BY cCallNature from Callinfo)AS Expr1 FROM CallInfo WHERE(cCallNature ='紧急呼叫')GROUP BY cDispatcherName,cCallNature Errormsg ::解析查询时出错。 [令牌行号= 1,令牌行偏移= 93,令牌出错= SELECT]我正在处理Sqlserverce Compactedtion – Ram

回答

0

我觉得这个查询可以在一个更好的写但我可以看到你没有指定(DispatcherName)的子查询的主要问题。

所以更改子查询,如下

(
     SELECT 
      COUNT(cCallNature) 
      FROM CallInfo rcall 
      WHERE (cCallNature ='Regular call' and rcall.cDispatcherName =CallInfo.CallInfo) 

    ) AS Expr1 

你也可以改变所有查询(但是这取决于你的需求)

SELECT  
    cDispatcherName AS Name, 
    COUNT(cCallNature) AS EmergencyCallTotal, 
    (
     SELECT 
      COUNT(cCallNature) 
      FROM CallInfo rcall 
      WHERE (cCallNature ='Regular call' and rcall.cDispatcherName =CallInfo.CallInfo) 
    ) AS RegularcallTotal 
FROM   CallInfo 
WHERE  (cCallNature = 'Emergency call') 
GROUP BY cDispatcherName 
+0

对不起仍然没有工作 – Ram

1

它不是你的后完全清楚从原来​​的查询,但是你不能在SQL-CE中使用嵌套选择,除非它们返回一个集合(而不是标量值),所以应该尝试类似;

SELECT  
     CallInfo.cDispatcherName AS Name, 
     cCallNature AS EmergencyCall, 
     COUNT(cCallNature) AS Total, 
     SUB.CNT AS RegularCalls 
    FROM CallInfo 
    LEFT JOIN (
     SELECT 
      cDispatcherName, 
      COUNT(*) AS CNT 
     FROM CallInfo 
     WHERE cCallNature ='Regular call' 
     GROUP BY cDispatcherName 
    ) AS SUB ON CallInfo.cDispatcherName = SUB.cDispatcherName 

    WHERE cCallNature = 'Emergency call' 
    GROUP BY CallInfo.cDispatcherName, CallInfo.cCallNature, SUB.CNT 
+0

Thanx非常为我工作 – Ram