Beste forumleden,
Deze query heeft me al meerdere dagen gekost. Ben er bijna, maar het laatste stukje wil maar niet.
Zie hier een uitkomst van onderstaande querie (total zit er nog niet bij)

En hier de query:
Regel 4(OnTime) hoeft niet weergegeven te worden, is enkel op het te versimpelen.
Probleem 1:
Het doel is om, indien er meerdere records met hetzelfde ConsigmentID is, de dubbele eruit gefilterd worden, en alleen de eerste zichtbaar is. Bij voorkeur ook diegene die de waarde 'N' heeft in het kolom OnTime. Hoe is dit te doen, want alles in een GROUP BY lukt me niet. (ook meerdere subqueries geprobeerd icm WITH).
Probleem 2:
Het totaal omzet moet per Consigment zichtbaar zijn, en niet per record. Dit is nu het geval met 'Total'.
Kunnen jullie me uit de brand helpen??
EDIT:
Het resultaat moet dus als volgt zijn:
Kolommen
ConsigmentID (UNIEK!), pickupDistrictID, DeliveryDistrictID, OnTime(optioneel), Deliverytype(optioneel), DeliveryTypeID, PickupTimeID, Exp_DeliveryTimeID, DeliveryTimeID(optioneel, bij voorkeur het hoogste nummer), Amount (Dit blijft '1' per record/consigmentID) en Total, wat het Total is per consigment (wat nu dubbele records geeft)
Deze query heeft me al meerdere dagen gekost. Ben er bijna, maar het laatste stukje wil maar niet.
Zie hier een uitkomst van onderstaande querie (total zit er nog niet bij)

En hier de query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| select sCon.CONSIGNMENT_SEGNR AS ConsignmentID, lCon.PICKUP_DISTRICT_NAME_SEGNR AS PickupDistrictID, lCon.DELIVERY_DISTRICT_NAME_SEGNR AS DeliveryDistrictID, IIF(DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) <= sPoCon.DELIVERY_TIME, 'Y', 'N') AS OnTime, DeliveryTypeID = CASE WHEN DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) <= sPoCon.DELIVERY_TIME AND sCon.EXPRESS_DELIVERY = 1 THEN '1' WHEN DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) > sPoCon.DELIVERY_TIME AND sCon.EXPRESS_DELIVERY = 1 THEN '2' WHEN DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) <= sPoCon.DELIVERY_TIME AND sCon.EXPRESS_DELIVERY = 0 THEN '3' WHEN DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) > sPoCon.DELIVERY_TIME AND sCon.EXPRESS_DELIVERY = 0 THEN '4' END, sTimePickup.TimeID AS PickupTimeID, sTimeExp.TimeID AS Exp_DeliveryTimeID, sTimeDelivery.TimeID AS DeliveryTimeID, Amount = '1' Total = (SELECT Price FROM DELIVERY_PRICE WHERE FROMWEIGHT <= sPoCon.WEIGHT_OF_CONSIGNMENT AND TOWEIGHT > sPoCon.WEIGHT_OF_CONSIGNMENT AND sCon.EXPRESS_DELIVERY = DELIVERY_PRICE.EXPRESS) --Total = (SELECT SUM(Price) FROM DELIVERY_PRICE WHERE FROMWEIGHT <= sPoCon.WEIGHT_OF_CONSIGNMENT AND TOWEIGHT > sPoCon.WEIGHT_OF_CONSIGNMENT AND sCon.EXPRESS_DELIVERY = DELIVERY_PRICE.EXPRESS GROUP BY Price) /*Total*/ from SAT_CONSIGNMENT AS sCon INNER JOIN LINK_CONSIGNMENT AS lCon ON sCon.CONSIGNMENT_SEGNR=lCon.CONSIGNMENT_SEGNR INNER JOIN ABC_Star.dbo.DimTime AS sTimePickup ON sTimePickup.Datetime=sCon.PICKUP_TIME INNER JOIN ABC_Star.dbo.DimTime AS sTimeExp ON sTimeExp.Datetime=sCon.SCHEDULED_PICKUP_TIME INNER JOIN LINK_PARCEL_OF_CONSIGNMENT AS lPoCon ON lPoCon.CONSIGNMENT_SEGNR=sCon.CONSIGNMENT_SEGNR INNER JOIN SAT_PARCEL_OF_CONSIGNMENT AS sPoCon ON sPoCon.PARCEL_OF_CONSIGNMENT_SEGNR=lPoCon.PARCEL_OF_CONSIGNMENT_SEGNR INNER JOIN ABC_Star.dbo.DimTime AS sTimeDelivery ON sTimeDelivery.Datetime=sPoCon.DELIVERY_TIME -- inner join HUB_CONSIGMENT as hcon on hcon.CONSIGNMENT_NR = lcon.CONSIGNMENT_SEGNR --GROUP BY sCon.CONSIGNMENT_SEGNR, lCon.PICKUP_DISTRICT_NAME_SEGNR, lCon.DELIVERY_DISTRICT_NAME_SEGNR, SAT_CONSIGNMENT.EXP_DURATION, --GROUP BY sCon.CONSIGNMENT_SEGNR, IIF(DATEADD(mi, sCon.EXP_DURATION, sCon.PICKUP_TIME) <= sPoCon.DELIVERY_TIME, 'Y', 'N') , lCon.PICKUP_DISTRICT_NAME_SEGNR, lCon.DELIVERY_DISTRICT_NAME_SEGNR, sTimePickup.TimeID, sTimeExp.TimeID, sTimeDelivery.TimeID, sPoCon.WEIGHT_OF_CONSIGNMENT, sCon.EXPRESS_DELIVERY ORDER BY ConsignmentID, OnTime |
Regel 4(OnTime) hoeft niet weergegeven te worden, is enkel op het te versimpelen.
Probleem 1:
Het doel is om, indien er meerdere records met hetzelfde ConsigmentID is, de dubbele eruit gefilterd worden, en alleen de eerste zichtbaar is. Bij voorkeur ook diegene die de waarde 'N' heeft in het kolom OnTime. Hoe is dit te doen, want alles in een GROUP BY lukt me niet. (ook meerdere subqueries geprobeerd icm WITH).
Probleem 2:
Het totaal omzet moet per Consigment zichtbaar zijn, en niet per record. Dit is nu het geval met 'Total'.
Kunnen jullie me uit de brand helpen??
EDIT:
Het resultaat moet dus als volgt zijn:
Kolommen
ConsigmentID (UNIEK!), pickupDistrictID, DeliveryDistrictID, OnTime(optioneel), Deliverytype(optioneel), DeliveryTypeID, PickupTimeID, Exp_DeliveryTimeID, DeliveryTimeID(optioneel, bij voorkeur het hoogste nummer), Amount (Dit blijft '1' per record/consigmentID) en Total, wat het Total is per consigment (wat nu dubbele records geeft)
[ Voor 5% gewijzigd door TereZz op 01-11-2016 18:39 ]