SQL Server和嵌套的SELECT:...')'附近的语法不正确?

问题描述:

执行我的代码时出现此错误。这是什么意思?我正在使用SQL Server Management Server Express。SQL Server和嵌套的SELECT:...')'附近的语法不正确?

消息102,级别15,状态1,行7

附近有语法错误 ')'。


declare @start datetime 
declare @end datetime 
set @start = '2012/01/02' 
set @end = '2012/01/06' 


SELECT 
SUM(VCount) as [Total], 
vdate, 
(select COUNT(VIP) From (SELECT DISTINCT(VIP) FROM dbo.Visiter)) as [IP3] 
FROM dbo.Visiter 
where VDate between @start and @end 
GROUP BY VDate 

在SQL Server中,当你在FROM子句中使用派生表(子查询),你必须给派生表的别名:

SELECT 
SUM(VCount) as [Total], 
vdate, 
-- add an alias in the next line 
(select COUNT(VIP) From (SELECT DISTINCT(VIP) FROM dbo.Visiter) AS a) as [IP3] 
FROM dbo.Visiter 
where VDate between @start and @end 
GROUP BY VDate 

参考:FROM clause

我觉得这

(select COUNT(VIP) From (SELECT DISTINCT(VIP) FROM dbo.Visiter)) as [IP3] 

是更好地转化为

(select COUNT(DISTINCT VIP) FROM dbo.Visiter) as [IP3] 

据我所知,MySQL的,至少说Every derived table must have its own alias这样,你的子查询早该样子

(select COUNT(v) From (SELECT DISTINCT(VIP) AS v FROM dbo.Visiter) AS tmp1) as [IP3] 

但短 - 好=)

+0

ID做的和得到这个: 消息156,15级,状态1,11号线 语法错误关键字接近 'SELECT'。 Msg 102,Level 15,State 1,Line 11 ')'附近语法不正确。 – user1133937 2012-01-06 08:55:07

+0

是的,抱歉,修正。已经测试=) – shybovycha 2012-01-06 08:56:32

+0

我想获得唯一访客的数量,但这让我总结所有独特的访客。请帮助我(对不起我弱的英语; D) – user1133937 2012-01-06 09:21:37