поиск между датой с запросом есть расчет и счетчик - PullRequest
0 голосов
/ 11 августа 2010

Привет всем, у меня большой запрос на расчет и счетчик по идентификатору клиники

SELECT nc.ID AS ClinicID, nc.Name AS ClinicName, 
       SUM(cr.CountRecept * cs.Price) AS TotalPriceService, SUM(cr.TotalPaid) AS TotalPaid, 
       SUM(cs.Price * cr.Company_Percentage / 100) AS TotalInsurance, 
       SUM(cr.CountRecept) AS TotalCountRecept
FROM ClinicsServices AS cs INNER JOIN
       (SELECT  tc.Date_Write, COUNT(ID) AS CountRecept, Clinic_Service_ID,  
        company_Percentage, Company_ID, SUM(Paid_Patient) AS TotalPaid
        FROM dbo.TicketsClinics AS tc WHERE  (Status = 1) 
        GROUP BY Clinic_Service_ID, Company_Percentage, Company_ID, tc.Date_Write) AS cr ON  
        cs.ID = cr.Clinic_Service_ID INNER JOIN
       (SELECT  ID, NAME FROM dbo.Clinics AS c GROUP BY ID, Name) AS nc ON cs.Clinic_ID = c.ID
GROUP BY nc.Name, nc.ID

это истинный запрос, но я хочу добавить между датой

 AND tc.Date_Write BETWEEN tc.Date_Write AND tc.Date_Write

в подзапросе

 Select tc.Date_Write
 Group by tc.Date_Write

в основном запросе

как это

   SELECT nc.ID AS ClinicID, nc.Name AS ClinicName, 
          SUM(cr.CountRecept * cs.Price) AS TotalPriceService, 
          SUM(cr.TotalPaid) AS TotalPaid, 
          SUM(cs.Price * cr.Company_Percentage / 100) AS TotalInsurance, 
          SUM(cr.CountRecept) AS TotalCountRecept, cr.Date_Write
   FROM dbo.ClinicsServices AS cs INNER JOIN
          (SELECT tc.Date_Write, COUNT(ID) AS CountRecept, Clinic_Service_ID,  
                  Company_Percentage, Company_ID, SUM(Paid_Patient) AS TotalPaid
           FROM dbo.TicketsClinics AS tc
           WHERE  (Status = 1) AND tc.Date_Write BETWEEN tc.Date_Write AND tc.Date_Write 
           GROUP BY Clinic_Service_ID, Company_Percentage, Company_ID, tc.Date_Write) 
                     AS cr ON cs.ID = cr.Clinic_Service_ID 
           INNER JOIN (SELECT  ID, NAME FROM dbo.Clinics AS c GROUP BY ID, Name) 
                              AS nc ON  cs.Clinic_ID = nc.ID
           GROUP BY nc.Name, nc.ID, cr.Date_Write

это ложный запрос почему, потому что он отображает каждую квитанцию, но я хочу показать 1 - TotalPriceService 2 - TotalPaid 3 - Тотальная страховка 4 - TotalCounterReceipt 5 - FromDate 6 - ToDate

истинный запрос, который возвращает вычисление и счетчик. Я хочу добавить поиск по дате. Я знаю, что второй запрос неправильный, но я хочу выполнить поиск по дате. МЕЖДУ 1026 *

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Ваше предложение BETWEEN проверяет, находится ли дата между собой. Это вернет true для каждой записи.

Для правильного использования МЕЖДУ вам необходимо указать две другие даты. Этот запрос выглядит как кандидат для хранимой процедуры, которая имеет два параметра даты: дату «от» и дату «до», например:

CREATE PROCEDURE usp_GetClinicStats(
    @FromDate DATETIME,
    @ToDate DATETIME
    )
AS
BEGIN
  SELECT nc.ID AS ClinicID, nc.Name AS ClinicName, 
          SUM(cr.CountRecept * cs.Price) AS TotalPriceService, 
          SUM(cr.TotalPaid) AS TotalPaid, 
          SUM(cs.Price * cr.Company_Percentage / 100) AS TotalInsurance, 
          SUM(cr.CountRecept) AS TotalCountRecept, cr.Date_Write
   FROM dbo.ClinicsServices AS cs INNER JOIN
          (SELECT tc.Date_Write, COUNT(ID) AS CountRecept, Clinic_Service_ID,  
                  Company_Percentage, Company_ID, SUM(Paid_Patient) AS TotalPaid
           FROM dbo.TicketsClinics AS tc
           WHERE Status = 1
             AND tc.Date_Write BETWEEN CONVERT(VARCHAR, @FromDate, 111) AND CONVERT(VARCHAR, @ToDate, 111) 
           GROUP BY Clinic_Service_ID, Company_Percentage, Company_ID, tc.Date_Write) 
                     AS cr ON cs.ID = cr.Clinic_Service_ID 
           INNER JOIN (SELECT  ID, NAME FROM dbo.Clinics AS c GROUP BY ID, Name) 
                              AS nc ON  cs.Clinic_ID = nc.ID
           GROUP BY nc.Name, nc.ID, cr.Date_Write
END
0 голосов
/ 12 августа 2010
     CREATE PROCEDURE usp_GetClinicStats(
@FromDate DATETIME,
@ToDate DATETIME
)
AS
  BEGIN
      SELECT nc.ID AS ClinicID, nc.Name AS ClinicName, 
             SUM(cr.CountRecept * cs.Price) AS TotalPriceService, 
             SUM(cr.TotalPaid) AS TotalPaid, 
             SUM(cs.Price * cr.Company_Percentage / 100) AS TotalInsurance, 
             SUM(cr.CountRecept) AS TotalCountRecept, cr.Date_Write
      FROM dbo.ClinicsServices AS cs INNER JOIN
      (SELECT tc.Date_Write, COUNT(ID) AS CountRecept, Clinic_Service_ID,  
              Company_Percentage, Company_ID, SUM(Paid_Patient) AS TotalPaid
       FROM dbo.TicketsClinics AS tc
       WHERE  (Status = 1) AND convert(varchar,tc.Date_Write,111) BETWEEN  
       convert(varchar,@FromDate,111) AND convert(varchar,@ToDate,111)
       GROUP BY Clinic_Service_ID, Company_Percentage, Company_ID, tc.Date_Write) 
                 AS cr ON cs.ID = cr.Clinic_Service_ID 
       INNER JOIN (SELECT  ID, NAME FROM dbo.Clinics AS c GROUP BY ID, Name) 
                          AS nc ON  cs.Clinic_ID = nc.ID
       GROUP BY nc.Name, nc.ID, cr.Date_Write
    END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...