2016-04-01 26 views
-1

Lütfen yardım edin!Çoklu alt sorgu ile SQL sözdizimi hatası

Sorgumun bir bölümünde sözdizimi hataları alıyorum ve neyin yanlış olduğunu anlayamıyorum. Intellisense kullanıyorum veritabanında çalışmıyor. Alt sorguları parantez içine almayı denedim, ancak bu hala bir sözdizimi hatası veriyor. Sorunu bilen var mı lütfen? Sanırım eksik bir ayraç ya da bir şey var ama alt sorguların sözdizimi hakkında bir şey bulamadım.

Yapmaya çalıştığım şey, varolan bir MS Access raporunu SQL'e dönüştürmektir, ki bu da verileri üretmek için birbirinin içine gömülen sorguların çok miktarda olması nedeniyle oldukça zor olduğunu kanıtlar. 'Qry' ile başlayan herhangi bir şey, Access'teki bir şeye referanstır. Bu sorgu, kapılardan personel giriş/çıkışını izlemek için kullanılan bir veritabanına aykırıdır ve katılım raporlaması için kullanılır. Ne yazık ki, şirket içi bir sistem olmadığından, veritabanı şemasına erişemiyorum, bu yüzden kendimi bir sorgu oluşturmaya çalışıyorum. Ben tam bir şey gönderebilirim ama bağlam olmadan çok anlamlı olmayabilir? Şimdilik, sorgunun bir kısmını yayınlayacağım. Ben alıyorum

hataları: Aşağıdaki SQL sorgusunun

>Msg 156, Level 15, State 1, Line 21 
>Incorrect syntax near the keyword 'RIGHT'. 
>Msg 156, Level 15, State 1, Line 27 
>Incorrect syntax near the keyword 'RIGHT'. 
>Msg 156, Level 15, State 1, Line 34 
>Incorrect syntax near the keyword 'ON'. 

parçası. 21. satırın ilk "DOĞRU JOIN" olduğu yer olduğunu unutmayın.

INNER JOIN (
    SELECT vw_ReportQuery.UserID 
     ,vw_ReportQuery.[6000UserName] 
     ,vw_ReportQuery.[6007EventTime] 
     ,CAST([6007EventTime] AS DATETIME) AS SDate 
     ,DatePart(HOUR, [6007EventTIme]) AS hoursBetween 
     ,vw_ReportQuery.[6002DoorName] 
    FROM vw_ReportQuery 
    WHERE (
      ((vw_ReportQuery.[6000UserName]) = 'Smith, Jon') 
      AND (
       (vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00' 
       AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00' 
       ) 
      AND (
       (DatePart(Hour, [6007EventTIme])) BETWEEN 12 
        AND 14 
       ) 
      AND (
       (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd floor Rear Goods Door (out)' 
       OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (out)' 
       OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (out)' 
       OR (
        (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd floor Rear Goods Door (in)' 
        OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (in)' 
        OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (in)' 
        ) 
       ) 
      ) 
    ) AS qryTestSelectedLunchPeriodHas_1 ON qryTestSelectedLunchPeriodHas.SDate = qryTestSelectedLunchPeriodHas_1.SDate 
GROUP BY qryTestSelectedLunchPeriodHas.UserID 
    ,qryTestSelectedLunchPeriodHas.[6000UserName] 
    ,qryTestSelectedLunchPeriodHas.SDate) -- as qryTestLunchPeriodHasFinal 
RIGHT JOIN (
    SELECT vw_ReportQuery.UserID 
     ,vw_ReportQuery.[6000UserName] 
     ,vw_ReportQuery.[6007EventTime] 
     ,Cast([6007EventTime] AS DATETIME) AS SDate 
    FROM vw_ReportQuery 
    WHERE (
      ((vw_ReportQuery.[6000UserName]) = 'Smith, Jon') 
      AND (
       (vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00' 
       AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00' 
       ) 
      ) 
    RIGHT JOIN (
     SELECT vw_ReportQuery.UserID 
      ,vw_ReportQuery.[6000UserName] 
      ,vw_ReportQuery.[6007EventTime] 
      ,Cast([6007EventTime] AS DATETIME) AS SDate 
     FROM vw_ReportQuery 
     WHERE (
       ((vw_ReportQuery.[6000UserName]) = 'Smith, Jon') 
       AND (
        (vw_ReportQuery.[6007EventTime]) >= '1/1/2016 00:00:00' 
        AND (vw_ReportQuery.[6007EventTime]) <= '1/30/2016 00:00:00' 
        ) 
       ) 
     ) ON qrySelectedDatesAndUser.SDate = qrySelectedDatesAndUser_1.SDate 
    ) ON qryTestLunchPeriodHasFinal.SDate = qrySelectedDatesAndUser.SDate 
GROUP BY qrySelectedDatesAndUser.[6000UserName] 
    ,qrySelectedDatesAndUser_1.SDate 
    ,qryTestLunchPeriodHasFinal.First 
    ,qryTestLunchPeriodHasFinal.Last 
    ,qryTestLunchPeriodHasFinal.LunchPeriod 
+0

Belki tablo diğer adları ihtiyaç yapabilirim? – jarlh

+0

Nereye gittiklerini bilmiyorum. Her 'ON' ya da başka bir yerden sonra mı? –

cevap

1

Sen alt sorgu takma dışarı yorumladı: -- as qryTestLunchPeriodHasFinal. Ve diğer alt sorgularınız da takma adlar gerektirir. Bahse girerim senin problemin.

Ayrıca, yerine

OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Staff Entrance (out)' 
OR (vw_ReportQuery.[6002DoorName]) LIKE 'Gnd flr Sub-let entrance (out)' 
OR .... 

arasında basitçe

OR vw_ReportQuery.[6002DoorName] IN ('Gnd flr Staff Entrance (out)', 'Gnd flr Sub-let entrance (out)', {etcetera}) 
+0

Sadece bir test olarak yorumladım, maalesef yine de maalesef işe yaramıyor. 'IN' kullanma tavsiyesi için teşekkürler, bu sorguyu akıcı hale getirmek için her şey yararlı olacaktır. Zamanımı, tüm alt sorguların ana sorguya koymadan önce kendi yaptıkları (yaptıkları) şekilde çalıştığından emin olmaya çalıştım. Her şeyi kendim inşa etmek için daha fazla zamana sahip olmak isterdim ama –