2010-08-11 5 views
0

Bonjour à tous j'ai BigQuery de calcul et compteur de clinique IDrecherche entre la date de requête ont calcul et contre

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 

il est vrai requête mais je veux ajouter entre la date

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

en sous-requête

Select tc.Date_Write 
Group by tc.Date_Write 

dans la requête principale

comme celui-ci

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 

est fausse requête pourquoi, car il est d'afficher tous les reçus, mais je veux afficher 1 - TotalPriceService 2 - TotalPaid 3 - TotalInsurance 4 - TotalCounterReceipt 5 - FromDate 6 - ToDate

la vraie requête qui renvoie le calcul et le compteur que je veux ajouter la recherche par date, je sais que la deuxième requête est mal, mais je veux une recherche par date ENTRE tc.Date_Write FROMDATE ET TODATE comment faire cela je vous remercie de me aider

+0

Votre Entre deux vérifications de clause pour déterminer si un champ est entre lui-même. Est-ce intentionnel? –

+0

oui c'est vérifications entre la date d'écriture du reçu –

+3

Cela renvoie TRUE pour chaque enregistrement. Une valeur est toujours ENTRE elle-même. –

Répondre

1

Votre clause BETWEEN vérifie si une date est entre elle-même. Cela retournera vrai pour chaque enregistrement.

Pour utiliser BETWEEN correctement, vous devez fournir deux autres dates. Cette requête semble être un candidat pour une procédure stockée qui a deux paramètres de date, un « de » date et a « à » la date, comme ceci:

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

Gardez à l'esprit que 'A BETWEEN B AND C' est un raccourci pour' A> = B ET A <= C'. Cela signifie que si vous passez deux dates qui n'ont pas de valeurs temporelles, leur valeur par défaut est 00: 00: 00' (minuit), ce qui entraîne l'exclusion de chaque enregistrement à la deuxième date si la date de l'enregistrement a un valeur de temps qui n'est pas minuit. –

+0

convertir (varchar, tc.Date_Write, 111) ENTRE convertir (varchar, @ FromDate, 111) ET convertir (varchar, @ ToDate, 111) –

0
 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 
+0

Ramy, vous auriez dû me laisser éditer ma réponse au lieu de poster votre propre. –

+0

Je suis très désolé M. Jeff Mattfield et aidez-moi dans cette situation Merci –

Questions connexes