J'ai deux tables dans SQL Server.
Je veux sélectionner DeptCode, DeptName, YearToDate, PeriodToDate (2 mois par exemple) et le grouper par DeptCode. Il y a un résultat que je veux get:
J'ai créé un morceau de code qui me montre le montant correct depuis le début de l'année mais je ne sais pas comment je peux append le suivant pour get le coût total pour une autre période. Est-il possible de faire cela?
SELECT d.DeptCode, d.DeptName, SUM(s.TotalCost) as YTD FROM [Departments] AS d INNER JOIN Shipments AS s ON d.DeptCode= s.DeptCode WHERE s.ShipmentDate BETWEEN DateAdd(yyyy, DateDiff(yyyy, 0, GetDate()), 0) AND GETDATE() GROUP BY d.DeptCode, d.DeptName
Votre sortie attendue ne correspond pas à 2 mois, mais voici le code pour accomplir ce que vous voulez. Il suffit d'append une SUM(CASE...)
à la 2ème condition.
SELECT d.DeptCode, d.DeptName, SUM(s.TotalCost) as YTD, SUM(CASE WHEN s.ShipmentDate >= DATEADD(month, -2, GETDATE()) then s.TotalCost else 0 END) as PTD FROM [Departments] AS d INNER JOIN Shipments AS s ON d.DeptCode= s.DeptCode WHERE Year(s.ShipmentDate) = Year(GETDATE()) GROUP BY d.DeptCode, d.DeptName
Il suffit d'append une colonne supplémentaire qui renvoie 0 lorsqu'elle n'est pas dans la plage de deux mois, par exemple SUM(CASE WHEN (date check) THEN (amount) ELSE 0 END)
. Découvrez la cinquième ligne:
SELECT d.DeptCode, d.DeptName, SUM(s.TotalCost) as YTD, SUM(CASE WHEN DateDiff(MONTH, s.ShipmentDate, GetDate()) < 2 THEN s.TotalCost ELSE 0 END) PTD, FROM [Departments] AS d INNER JOIN Shipments AS s ON d.DeptCode= s.DeptCode WHERE s.ShipmentDate BETWEEN DateAdd(yyyy, DateDiff(yyyy, 0, GetDate()), 0) AND GETDATE() GROUP BY d.DeptCode, d.DeptName
Essaye celui-là :
nbr_last2month_ AS ( SELECT DISTINCT Sum(s.[TotalCost]) AS 'PTD', s.DeptCode, s.DeptName FROM [Shipements] s LEFT JOIN [Departements] d ON d.[DeptCode] = s.[DeptCode] WHERE Year(date_) LIKE Year(GETDATE()) AND MONTH(ShipementDate) LIKE Month(Getdate()) - 2 Group by DeptCode ), nbr_YTD_ AS ( SELECT DISTINCT Sum(s.[TotalCost]) AS 'YTD', s.DeptCode, s.DeptName FROM [Shipements] s LEFT JOIN [Departements] d ON d.[DeptCode] = s.[DeptCode] WHERE Year(ShipementDate) LIKE Year(GETDATE()) Group by DeptCode ), SELECT A.DeptCode, A.DeptName, YTD, PTD FROM nbr_YTD_ A LEFT JOIN nbr_last2month_ B on B.DeptCode = A.DeptCode ORDER BY DeptCode