2017-12-07 3 views
-4
SELECT wrhwr.bl_id, 
     Count(wrhwr.wr_id) AS ct_wr_id 
FROM  ( 
       SELECT wrhwr.bl_id, 
         wrhwr.wr_id, 
         wrhwr.site_id, 
         wrhwr.date_requested 
       FROM wrhwr 
       WHERE 
       And ( 
           wrhwr.bl_id LIKE 'F0006440-B0001%') 
       AND wrhwr.bl_id IN 
         ( 
           SELECT TOP 10 
             q.bl_id 
           FROM  ( 
                SELECT bl_id, 
                  Count(wr_id) AS wrcnt 
                FROM  afm.wrhwr 
                GROUP BY bl_id) AS q 
           WHERE wrhwr.[status] IN ('Com', 
                  'I', 
                  'HL', 
                  'HP', 
                  'S') 
           ORDER BY q.wrcnt DESC))wrhwr 
WHERE (( 
        And  ( 
            wrhwr.bl_id LIKE 'F0006440-B0001%'))) 
AND  ( 
        wrhwr.site_id IN 
        ( 
         SELECT site_id 
         FROM site 
         WHERE state_id = 'JHB') 
     OR  wrhwr.site_id IS NULL) 
GROUP BY wrhwr.bl_id 
ORDER BY wrhwr.bl_id DESC 
+4

'WO und' das ist der Fehler – HoneyBadger

+1

Wenn Sie Ihre Abfrage formatiert, wäre es viel einfacher, den einfachen Fehler zu erkennen. – DavidG

+1

In der Tat ist diese Abfrage ziemlich schrecklich, Sie haben 4 verschachtelte Ebenen von 'SELECT', die fast sicher nicht geschachtelt werden müssen. – DavidG

Antwort

0

Sie haben verwendet AND + WHERE für die gleiche Aussage, die Sie den Fehler wie dieses

SELECT wrhwr.bl_id, 
         wrhwr.wr_id, 
         wrhwr.site_id, 
         wrhwr.date_requested 
       FROM wrhwr 
       WHERE 
       And ( 
           wrhwr.bl_id LIKE 'F0006440-B0001%') 

Hier schenkt, und ist nicht erforderlich, da Sie nur 1 Filterkriterien haben, versuchen Sie diese

SELECT wrhwr.bl_id, 
     Count(wrhwr.wr_id) AS ct_wr_id 
FROM  (
       SELECT wrhwr.bl_id, 
         wrhwr.wr_id, 
         wrhwr.site_id, 
         wrhwr.date_requested 
       FROM wrhwr 
       WHERE wrhwr.bl_id LIKE 'F0006440-B0001%' 
       AND wrhwr.bl_id IN 
         (
           SELECT TOP 10 
             q.bl_id 
           FROM  (
                SELECT bl_id, 
                  Count(wr_id) AS wrcnt 
                FROM  afm.wrhwr 
                GROUP BY bl_id) AS q 
           WHERE wrhwr.[status] IN ('Com', 
                  'I', 
                  'HL', 
                  'HP', 
                  'S') 
           ORDER BY q.wrcnt DESC) 
     )wrhwr 
WHERE wrhwr.bl_id LIKE 'F0006440-B0001%' 
AND  (
        wrhwr.site_id IN 
        (
         SELECT site_id 
         FROM site 
         WHERE state_id = 'JHB') 
     OR  wrhwr.site_id IS NULL) 
GROUP BY wrhwr.bl_id 
ORDER BY wrhwr.bl_id DESC 
+0

Danke, es funktioniert. –

0

Das zumindest lesbar ist ...

SELECT wrhwr.bl_id, 
     Count(wrhwr.wr_id) AS ct_wr_id 
FROM (SELECT wrhwr.bl_id, 
       wrhwr.wr_id, 
       wrhwr.site_id, 
       wrhwr.date_requested 
     FROM wrhwr 
     WHERE AND (wrhwr.bl_id LIKE 'F0006440-B0001%') 
      AND wrhwr.bl_id IN (SELECT TOP 10 q.bl_id 
           FROM (SELECT bl_id, 
               Count(wr_id) AS wrcnt 
             FROM afm.wrhwr 
             GROUP BY bl_id) AS q 
           WHERE wrhwr.[status] IN ('Com','I','HL','HP','S') 
           ORDER BY q.wrcnt DESC))wrhwr 
WHERE ((And(wrhwr.bl_id LIKE 'F0006440-B0001%'))) 
    AND (wrhwr.site_id IN (SELECT site_id 
           FROM [site] 
           WHERE state_id = 'JHB') 
    OR wrhwr.site_id IS NULL) 
GROUP BY wrhwr.bl_id 
ORDER BY wrhwr.bl_id DESC; 

Und dann, weil es lesbar ist, können Sie leicht sehen, wo die Probleme sind (die ich auskommentiert habe).

SELECT wrhwr.bl_id, 
     Count(wrhwr.wr_id) AS ct_wr_id 
FROM (SELECT wrhwr.bl_id, 
       wrhwr.wr_id, 
       wrhwr.site_id, 
       wrhwr.date_requested 
     FROM wrhwr 
     WHERE /*AND (*/wrhwr.bl_id LIKE 'F0006440-B0001%'/*) */ 
      AND wrhwr.bl_id IN (SELECT TOP 10 q.bl_id 
           FROM (SELECT bl_id, 
               Count(wr_id) AS wrcnt 
             FROM afm.wrhwr 
             GROUP BY bl_id) AS q 
           WHERE wrhwr.[status] IN ('Com','I','HL','HP','S') 
           ORDER BY q.wrcnt DESC))wrhwr 
WHERE /*((And(*/wrhwr.bl_id LIKE 'F0006440-B0001%'/*))) */ 
    AND /*(*/wrhwr.site_id IN (SELECT site_id 
           FROM [site] 
           WHERE state_id = 'JHB') 
    OR wrhwr.site_id IS NULL/*)*/ 
GROUP BY wrhwr.bl_id 
ORDER BY wrhwr.bl_id DESC; 

Aber ich will ehrlich sein, diese Abfrage noch schrecklich ist, aber nach meiner SQL OCD zumindest fix in gekickt die „Look“ der Abfrage, habe ich kein Interesse nutzbar zu machen. :)

Verwandte Themen