Продолжаю получать сообщение 102, уровень 15, состояние 1, строка 18 Неправильный синтаксис рядом с ‘e’.

#sql #sql-server #tsql #sql-server-2008

#sql #sql-сервер #tsql #sql-server-2008

Вопрос:

 SELECT TOP(5000) 
 a.actions, 
 b.backtracks, 
 i.items,  
 u.users,     
 ROUND(a.actions/u.users,2) AS average_actions_per_user,     
 ROUND((e.number_of_total_actions_of_items_in_itemassoc/a.actions)*100,2) as recommendation_coverage  
 FROM  (SELECT count(1) as actions FROM [action] WHERE tenantid='1') a JOIN  
       (SELECT count(1) as backtracks FROM backtracking WHERE tenantid='') b JOIN   
       (SELECT count(1) as items FROM (SELECT distinct itemid FROM [action] where tenantid = '1') a) i JOIN    
       (SELECT count(1) as users FROM (SELECT distinct userid FROM [action] where tenantid = '1') a) u JOIN  

       (SELECT SUM(c) AS number_of_total_actions_of_items_in_itemassoc FROM 
       (SELECT c FROM 
       (SELECT itemid, itemtypeid, tenantid, COUNT(1) as c 
            FROM [action] WHERE tenantid = '1' GROUP BY itemId,itemTypeId,tenantId) a 
            INNER JOIN itemassoc i ON (i.itemfromid = a.itemid AND a.itemtypeid = i.itemFromTypeId AND a.tenantid = i.tenantid)
                 GROUP BY a.itemid, a.itemtypeid, a.tenantid) a) e JOIN 
  

Кто-нибудь может мне помочь? Я вижу ошибку, но я не знаю, почему это происходит: (

Комментарии:

1. Пожалуйста, сообщите нам, с какой ошибкой вы столкнулись?

2. У вас есть куча join s, но нет on предложения. msdn.microsoft.com/en-us/library/ms177634.aspx

3. Сообщение 102, уровень 15, состояние 1, строка 18 Неправильный синтаксис рядом с ‘e’.

Ответ №1:

Похоже, что условие «включено» отсутствует для всех соединений. Этот модифицированный запрос не имеет проблем с синтаксисом (хотя не уверен, что он делает то, что нужно):

 SELECT TOP(5000) 
 a.actions, 
 b.backtracks, 
 i.items,  
 u.users,     
 ROUND(a.actions/u.users,2) AS average_actions_per_user,     
 ROUND((e.number_of_total_actions_of_items_in_itemassoc/a.actions)*100,2) as recommendation_coverage  
 FROM  (SELECT count(1) as actions FROM [action] WHERE tenantid='1') a JOIN  
       (SELECT count(1) as backtracks FROM backtracking WHERE tenantid='') b on 1 = 1 JOIN   
       (SELECT count(1) as items FROM (SELECT distinct itemid FROM [action] where tenantid = '1') a) i on 1 = 1 JOIN    
       (SELECT count(1) as users FROM (SELECT distinct userid FROM [action] where tenantid = '1') a) u on 1 = 1 JOIN  

       (SELECT SUM(c) AS number_of_total_actions_of_items_in_itemassoc FROM 
       (SELECT c FROM 
       (SELECT itemid, itemtypeid, tenantid, COUNT(1) as c 
            FROM [action] WHERE tenantid = '1' GROUP BY itemId,itemTypeId,tenantId) a 
            INNER JOIN itemassoc i ON (i.itemfromid = a.itemid AND a.itemtypeid = i.itemFromTypeId AND a.tenantid = i.tenantid)
                 GROUP BY a.itemid, a.itemtypeid, a.tenantid) a) e on 1 = 1
  

если вы удалите все on 1 = 1 с вашими фактическими условиями для объединений, я думаю, вы получите то, что вам нужно.