Ищете все записи из таблицы, принадлежащие клиенту, который соответствует указанным критериям - PullRequest
0 голосов
/ 05 мая 2020

Я достаточно базовый c SQL пользователь Server Management Studio, я знаю, что мне обычно нужно, но это в новинку для меня.

У меня есть текущий экстракт, который выбирает все строки из таблицы ci_periodicBillings, где скорость составляет «165,56» или «-165,56» в заданный период времени. Это нормально и работает, но теперь у меня есть дополнительное требование, чтобы отображать все записи из ci_periodicBillings независимо от скорости, КАК ДОЛГО, КАК У КЛИЕНТА ЕСТЬ ПО МЕНЬШЕ ОДНОЙ, где скорость составляет «165,56» или «-165,56». поэтому у клиента A есть 5 строк с разными скоростями, но 1 - «165,56» - мне нужно показать все 5 строк, что у клиента B 7 строк с разными скоростями, и 0 соответствует критериям - мне ни одна из них не нужна.

У меня уже есть приведенный ниже код для выбора значений «156,56» или «-156,56», но мне нужно добавить новое требование для отображения всех строк, принадлежащих каждому клиенту.

Спасибо за любую помощь.

SELECT f.NAME                     AS Home, 
       c.forename, 
       c.surname, 
       c.resid, 
       Cast(c.admission AS DATE)  AS ADMISSION, 
       Cast(c.leavedate AS DATE)  AS LEAVE, 
       fm.fundingname, 
       p.description              AS ServiceType, 
       Cast(pb.billstart AS DATE) AS BILLSTART, 
       Cast(pb.endbill AS DATE)   AS ENDBILL, 
       a.accountcode, 
       a.accountname 
FROM   cs_facilities f 
       LEFT JOIN cs_clients c 
              ON f.guid = c.facility 
       LEFT JOIN ci_periodicbillings pb 
              ON c.guid = pb.client 
       LEFT JOIN cs_fundingmethods fm 
              ON pb.restype = fm.fundingid 
       LEFT JOIN ci_products p 
              ON pb.product = p.guid 
       LEFT JOIN cs_accounts a 
              ON pb.accountguid = a.account 
WHERE  ( ( billstart BETWEEN '2019-04-01' AND '2020-03-31' ) 
          OR ( endbill BETWEEN '2019-04-01' AND '2020-03-31' ) 
          OR ( billstart <= '2019-04-01' 
               AND endbill >= '2020-03-31' ) ) 
       AND ( pb.rate = '165.56' 
              OR pb.rate = '-165.56' ) 
ORDER  BY f.NAME, 
          c.surname ASC, 
          c.forename ASC 

1 Ответ

1 голос
/ 05 мая 2020

удалите часть pb.rate ... в вашем запросе и добавьте следующее непосредственно перед предложением where

Inner JOIN ( Select * from ci_periodicbillings where pb.rate in('165.56','-165.56')  )  restrictedClients 
              ON c.guid = restrictedClients.client 

Это присоединится только к клиентам, имеющим '165,56' или '-165,56' как ставка в счете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...