jeg har 3 tabeller hvor jeg skal trække data ud. Jeg vil selectere på 2 fields fra 2 af tabellerne. Fra den sidste tabel vil jeg bare tælle antal der matcher mine kriterier.
Jeg har fundet frem til dette her, men det er ikke helt godt nok:
SELECT OrderParcelNumbers.ParcelNumber, CargoLine.GoodsDescription, OrderStatus.TimeStatus FROM TransFleet.dbo.CargoLine CargoLine, TransFleet.dbo.OrderParcelNumbers OrderParcelNumbers, TransFleet.dbo.OrderStatus OrderStatus WHERE CargoLine.OrderId = OrderStatus.OrderId AND OrderParcelNumbers.OrderId = OrderStatus.OrderId AND ((OrderStatus.TimeStatus>{ts '2003-09-01 00:00:00'} And OrderStatus.TimeStatus<{ts '2003-09-02 00:00:00'})) GROUP BY OrderParcelNumbers.ParcelNumber, CargoLine.GoodsDescription, OrderStatus.TimeStatus HAVING (CargoLine.GoodsDescription='afhenter')
Vil kun have antallet af pakker der har goodsdescription "afhenter"
SELECT a.ParcelNumber, COUNT(a.ParcelNumber) AS SumPK, b.GoodsDescription, c.TimeStatus FROM TransFleet.dbo.CargoLine b, TransFleet.dbo.OrderParcelNumbers a, TransFleet.dbo.OrderStatus c WHERE b.OrderId = c.OrderId AND a.OrderId = c.OrderId AND c.TimeStatus>{ts '2003-09-01 00:00:00'} And c.TimeStatus<{ts '2003-09-02 00:00:00'} AND b.GoodsDescription='afhenter' GROUP BY a.ParcelNumber, b.GoodsDescription, c.TimeStatus
men min SumPK bliver kun 1. Resultatet er vist herunder...
nej, der er ikke decideret fejl i resultatet, men min sum bliver ikke 6 som jeg gerne vil have det til at blive. Altså at sum indeholder antallet af rows affected.....
OK, det kan du ikke gøre i samme script uden at bruge UNION - kan ikke uniddelbart huske syntaxen, men det er noget i stil med, at efter dette script skal du skrive a la:
UNION SELECT count(*) FROM - og så dine betingelser.
Du kan også prøve, at ændre COUNT(a.ParcelNumber) til COUNT(*)
Jeg har ikke det store held med en union, men tænkte på om jeg ikke kunne gøre noget i stil med:
select count(*) from orderparcelnumbers where parcelnumber in (
SELECT a.ParcelNumber, b.GoodsDescription, c.TimeStatus FROM TransFleet.dbo.CargoLine b, TransFleet.dbo.OrderParcelNumbers a, TransFleet.dbo.OrderStatus c WHERE b.OrderId = c.OrderId AND a.OrderId = c.OrderId AND c.TimeStatus>{ts '2003-09-01 00:00:00'} And c.TimeStatus<{ts '2003-09-02 00:00:00'} AND b.GoodsDescription='afhenter' )
Jeg får dog desværre denne fejl meddelse: Server: Msg 116, Level 16, State 1, Line 1 Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
og har ikke kunnet finde ud af hvordan jeg fletter "exists" ind i min query....
WHERE b.OrderId = c.OrderId AND a.OrderId = c.OrderId AND c.TimeStatus>{ts '2003-09-01 00:00:00'} And c.TimeStatus<{ts '2003-09-02 00:00:00'} AND b.GoodsDescription='afhenter'
Nej det er OK !, jeg gav dig ikke en løsning - men du er velkommen til at maile mig DB, så kan jeg se om jeg hurtigt kan omforme min Oracle/informix SQL til noget du kan bruge.
Forresten en ide: Du kan evt. starte med et seperat script som COUNT i en temp tabel SELECT COUNT(a.ParcelNumber), osv osv. INTO TEMP abc WHERE bla. bla.; <dit script her> og med i din select skal du tage værdien fra abc. Prøv først at selecte til temp abc for, at se hvordan kolonnen med resultsettet navngives
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.