Avatar billede snakeeyz Nybegynder
10. maj 2004 - 12:13 Der 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

Håber I kan hjælpe asap ;-)
På forhånd tak!
Avatar billede mortency Nybegynder
10. maj 2004 - 12:16 #1
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 )
Avatar billede mortency Nybegynder
10. maj 2004 - 12:20 #2
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
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 12:31 #3
virker desværre ikke.
Eks. på mainorderdate: 27-03-2003
Avatar billede mortency Nybegynder
10. maj 2004 - 12:36 #4
dato format må være yyyy-dd-mm hh:mm:ss
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 12:39 #5
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)
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 12:44 #6
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)

Melder "Incocret syntax nerar '00'

Gedate() returnerer: 2004-05-10 12:41:27.863
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 13:08 #7
ingen der har gode idéer ? :-(
Avatar billede mortency Nybegynder
10. maj 2004 - 13:14 #8
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)
Avatar billede mortency Nybegynder
10. maj 2004 - 13:16 #9
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)
Avatar billede knowit-mmp Nybegynder
10. maj 2004 - 13:18 #10
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'))

/Martin
Avatar billede mortency Nybegynder
10. maj 2004 - 13:20 #11
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)
Avatar billede mortency Nybegynder
10. maj 2004 - 13:21 #12
//Sorry

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)
Avatar billede knowit-mmp Nybegynder
10. maj 2004 - 13:21 #13
Lige en uddybende bemærkning :

convert(datetime,'2003-apr-01')

kan også skrives som

convert(datetime,'2003-04-01',105)), hvor den sidste parameter angiver hvilket format datoen står i....se evt. SQL Books Online.

/Martin
Avatar billede knowit-mmp Nybegynder
10. maj 2004 - 13:26 #14
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
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 13:33 #15
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
Avatar billede knowit-mmp Nybegynder
10. maj 2004 - 13:35 #16
No prob....

/Martin
Avatar billede mortency Nybegynder
10. maj 2004 - 13:40 #17
Bra du fikk fikset det!
Avatar billede snakeeyz Nybegynder
10. maj 2004 - 13:45 #18
Jepz, jeg siger mange tak for hjælpen til jer begge ;-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester