Как улучшить "Неверный синтаксис рядом с ключевым словом" выберите "." - PullRequest
0 голосов
/ 11 июня 2009

этот запрос дает мне "Неверный синтаксис рядом с ключевым словом" выбрать "." посмотрите пожалуйста ниже области жирного символа.

declare @date1 smalldatetime, @date2 smalldatetime, @page nvarchar(100) ,@sum int
select @date1='2009-06-06',@date2='2009-06-13',@page='Tüm Sayfalar'
<b>set @sum = select Sum(t.[VISITINGCOUNT]) from</b>
(        
select count(page) as [VISITINGCOUNT],                 
     cast(DATENAME ( year ,DATE)+'-'+DATENAME (month ,DATE)+
     '-'+DATENAME (day ,DATE) as smalldatetime)  as [DATE]               
    from scr_StatisticaLog                
    where Date between @date1 and  @date2  
          and (Page=@page or  @page='Tüm Sayfalar')  and ProcessType='PageView'           
GROUP BY 
cast(DATENAME ( year ,DATE)+
'-'+DATENAME (month ,DATE)+
'-'+DATENAME (day ,DATE) as smalldatetime)) as t    

select 100*(t.[VISITINGCOUNT]/@sum),t.[DATE] from        
(        
select count(page) as [VISITINGCOUNT],                 
     cast(DATENAME ( year ,DATE)+'-'+DATENAME (month ,DATE)+
     '-'+DATENAME (day ,DATE) as smalldatetime)  as [DATE]               
    from scr_StatisticaLog                
    where Date between @date1 and  @date2  
          and (Page=@page or  @page='Tüm Sayfalar')  and ProcessType='PageView'           
GROUP BY 
cast(DATENAME ( year ,DATE)+
'-'+DATENAME (month ,DATE)+
'-'+DATENAME (day ,DATE) as smalldatetime)) as t   

Ответы [ 5 ]

3 голосов
/ 11 июня 2009

Я не верю, что вы можете иметь SET @var = SELECT ...

Попробуйте вместо этого:

SELECT @sum = Sum(t.[VISITINGCOUNT]) from ...

Я также хотел бы сказать, что, поскольку все, что вы делаете, - это СУММА одного столбца в вашем подзапросе, то нет смысла делать группу или возвращать второй столбец.

Вы в основном подсчитываете количество записей в различных группах, а затем складываете все группы вместе. Гораздо быстрее просто посчитать общее количество страниц, если это все, что вам нужно.

Следующее было бы намного проще:

SELECT @sum = COUNT(page) FROM scr_StatisticaLog                
   WHERE Date BETWEEN @date1 AND  @date2  
   AND (Page=@page OR  @page='Tüm Sayfalar') AND ProcessType='PageView'
1 голос
/ 11 июня 2009

Попробуйте изменить

set @sum = select Sum(t.[VISITINGCOUNT]) from

до

select @sum = Sum(t.[VISITINGCOUNT]) from

Пока не проверял, все работает, просто правильно разбирает без ошибок.

0 голосов
/ 10 августа 2009

Если вы выполняете это из SSMS, попробуйте включить «Режим SQLCMD» из меню перед выполнением сценария.

0 голосов
/ 11 июня 2009

Если вы настаиваете на том, чтобы придерживаться SET, то заключите весь подзапрос в скобки ()

set @sum = ( select Sum(t.[VISITINGCOUNT]) from ....... )

в противном случае измените присваивание переменной на 'SELECT @var =', как предлагают другие ответы

0 голосов
/ 11 июня 2009
declare @date1 smalldatetime, @date2 smalldatetime, @page nvarchar(100) ,@sum int
select @date1='2009-06-06',@date2='2009-06-13',@page='Tüm Sayfalar'

--Changed here
select @sum = Sum(t.[VISITINGCOUNT]) from
(        
select count(page) as [VISITINGCOUNT],                 
     cast(DATENAME ( year ,DATE)+'-'+DATENAME (month ,DATE)+
     '-'+DATENAME (day ,DATE) as smalldatetime)  as [DATE]               
    from scr_StatisticaLog                
    where Date between @date1 and  @date2  
          and (Page=@page or  @page='Tüm Sayfalar')  and ProcessType='PageView'           
GROUP BY 
cast(DATENAME ( year ,DATE)+
'-'+DATENAME (month ,DATE)+
'-'+DATENAME (day ,DATE) as smalldatetime)) as t    




select 100*(t.[VISITINGCOUNT]/@sum),t.[DATE] from        
(        
select count(page) as [VISITINGCOUNT],                 
     cast(DATENAME ( year ,DATE)+'-'+DATENAME (month ,DATE)+
     '-'+DATENAME (day ,DATE) as smalldatetime)  as [DATE]               
    from scr_StatisticaLog                
    where Date between @date1 and  @date2  
          and (Page=@page or  @page='Tüm Sayfalar')  and ProcessType='PageView'           
GROUP BY 
cast(DATENAME ( year ,DATE)+
'-'+DATENAME (month ,DATE)+
'-'+DATENAME (day ,DATE) as smalldatetime)) as t   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...