10. maj 2004 - 12:13Der er
16 kommentarer og 2 løsninger
Find sum mellem to datoer
Hej Eksperter
nogen der kan svare mig på hvorfor følgende ikke virker:
SELECT SUM(OrderLine.OrderLineAmount * Product.ProductPrice) AS Total FROM OrderLine INNER JOIN MainOrder ON OrderLine.MainOrderID = MainOrder.MainOrderID INNER JOIN Product ON OrderLine.ProductID = Product.ProductID where mainorderDate >=2003-03-01 and mainorderdate <=2003-04-01
Jeg forsøger at finde summen af ordrelinjer på en given månede. Men der returneres blot NULL (Og der er data i den givne periode). Hvis jeg fjerner WHERE betingelsen virker det for alle data. Datoen er en DateTime
SELECT SUM(OrderLine.OrderLineAmount * Product.ProductPrice) AS Total FROM OrderLine INNER JOIN MainOrder ON OrderLine.MainOrderID = MainOrder.MainOrderID INNER JOIN Product ON OrderLine.ProductID = Product.ProductID where ( mainorderDate >=2003-03-01 ) and ( mainorderdate <=2003-04-01 )
SELECT SUM(OrderLine.OrderLineAmount * Product.ProductPrice) AS Total FROM OrderLine INNER JOIN MainOrder ON OrderLine.MainOrderID = MainOrder.MainOrderID INNER JOIN Product ON OrderLine.ProductID = Product.ProductID where ( mainorderDate 2003-03-01 00:00:00 ) between ( mainorderdate 2003-04-01 23:59:59 )
ELLER
SELECT SUM(OrderLine.OrderLineAmount * Product.ProductPrice) AS Total FROM OrderLine INNER JOIN MainOrder ON OrderLine.MainOrderID = MainOrder.MainOrderID INNER JOIN Product ON OrderLine.ProductID = Product.ProductID where mainorderDate 2003-03-01 00:00:00 between mainorderdate 2003-04-01 23:59:59
det er sådan den står i min DB, havde bare læst et sted, at man skulle skrive årstal først. Forstår bare ikke, at det ikke virker. Kører en lign sætning hvor jeg henter ud på dato, og der virker det. (Bruger dog getdate() i stedet)
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (MainOrderDate >= 2003-03-01 00:00:00.000) AND (MainOrderDate <= 2003-04-01 00:00:00.000)
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (MainOrderDate >= 2003-03-01 00:00:00) BETWEEN (MainOrderDate <= 2003-04-01 00:00:00)
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (MainOrderDate >= 2003-03-01 00:00:00.000) AND (MainOrderDate <= 2003-04-01 00:00:00.000)
Når jeg arbejder med datoer på SQL, så har jeg det bedst med at få SQL til selv at finde det rigtige datoformat :
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND MainOrderDate BETWEEN convert(datetime,'2003-mar-01') AND convert(datetime,'2003-apr-01'))
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total //Denne må virke...
FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (2003-03-01 00:00:00 >= MainOrderDate AND 2003-04-01 23:59:59 <= MainOrderDate)
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (2003-03-01 00:00:00 >= MainOrderDate AND 2003-04-01 23:59:59 <= MainOrderDate)
Den kan også simplificeres endnu mere, sålænge det er for hele måneder så skulle denne kunne bruges :
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE dbo.MainOrder.MainOrderStatus = 'slettet' AND MONTH(MainOrderDate)=4
SELECT SUM(dbo.OrderLine.OrderLineAmount * dbo.Product.ProductPrice) AS Total FROM dbo.OrderLine INNER JOIN dbo.MainOrder ON dbo.OrderLine.MainOrderID = dbo.MainOrder.MainOrderID INNER JOIN dbo.Product ON dbo.OrderLine.ProductID = dbo.Product.ProductID WHERE (dbo.MainOrder.MainOrderStatus = 'slettet') AND (MONTH(dbo.MainOrder.MainOrderDate) = 3) AND (YEAR(dbo.MainOrder.MainOrderDate) = 2003)
Know: det virker, har tilføjet årstal! Tak for hjælpen
Jepz, jeg siger mange tak for hjælpen til jer begge ;-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.