0
Hoe selecteer je alle verkooporders met een orderdatum vanaf vandaag tot over 3 werkdagen?
Die orders moeten naar onze distributeur verzonden worden, zodat ze tijdig afgeleverd worden.
De zaterdag en zondag worden niet meegeteld als werkdag.

Aanvaard antwoord

vrijdag, juni 14 2013, 10:53 AM - #permalink
0
Onderstaande Sql-query haalt de selectie uit de administratie.

/******** Lees: alle verkooporders met een orderdatum vanaf vandaag tot over 3 werkdagen */
/* zaterdag en zondag worden niet meegeteld als werkdag */

DECLARE @AantalWerkdagen INT;
SET @AantalWerkdagen = 3;

SET DATEFIRST 7; --nu retourneert een SELECT DATEPART(weekday, ..datum..) : zo = 1, ma = 2, di = 3, wo = 4, do = 5, vr = 6, za = 7;
--Als huidige datum leverdatum op ma of di, dan moet de order 2 dagen eerder doorgezonden worden

--Weekdag = (DATEPART( DW, CONVERT(DATETIME, @Datum, 105)) - 1) -- (0 t/m 6, zondag = 0)
--AantalWekenVan5Werkdagen = FLOOR(@AantalWerkdagen / 5)
--AantalWerkdagenMinusAantalHeleWeken = (@AantalWerkdagen % 5)

-- verzend | order-
-- datum | datum t/m
-- wo (5) ma
-- do (5) di
-- vr (5) wo
-- ma (3) do
-- di (3) vr

SELECT TOP (100) PERCENT vo.fldOrdernummer,
CASE DATEPART(DW, vo_1.fldVerzendDatum) WHEN 1 THEN 'Zondag' WHEN 2 THEN 'Maandag' WHEN 3 THEN 'Dinsdag' WHEN 4 THEN 'Woensdag' WHEN 5 THEN 'Donderdag' WHEN 6 THEN 'Vrijdag' WHEN 7 THEN 'Zaterdag' ELSE 'Fout' END AS fldVerzendDag,
CONVERT(VARCHAR(10), vo_1.fldVerzendDatum, 105) AS fldVerzendDatum,
CASE DATEPART(DW, vo.fldDatum) WHEN 1 THEN 'Zondag' WHEN 2 THEN 'Maandag' WHEN 3 THEN 'Dinsdag' WHEN 4 THEN 'Woensdag' WHEN 5 THEN 'Donderdag' WHEN 6 THEN 'Vrijdag' WHEN 7 THEN 'Zaterdag' ELSE 'Fout' END AS fldOrderDag,
CONVERT(VARCHAR(10), vo.fldDatum, 105) AS fldOrderDatum,
vo.fldVerzendNaam,
vo.fldVerzendAdres,
vo.fldVerzendPostcode,
vo.fldVerzendPlaats
FROM dbo.tblVerkoopOrder AS vo INNER JOIN
(SELECT fldVerkoopOrderID, DATEADD(D,
- @AantalWerkdagen -- - aantal werkdagen
- CASE WHEN (DATEPART(DW, CONVERT(DATETIME, vo.fldDatum, 105)) - 1) = 6 THEN 1 ELSE 0 END -- - als zaterdag; -1
- CASE WHEN (DATEPART(DW, CONVERT(DATETIME, vo.fldDatum, 105)) - 1) <= (@AantalWerkdagen % 5) THEN 2 ELSE 0 END -- - als Weekdag <= REST(AantalWerkdagen / 5); -2
- FLOOR(@AantalWerkdagen / 5) * 2 -- - elke 5 werkdagen; 2 extra
, CONVERT(DATETIME, vo.fldDatum, 105)) AS fldVerzendDatum
FROM dbo.tblVerkoopOrder AS vo) AS vo_1 ON vo.fldVerkoopOrderID = vo_1.fldVerkoopOrderID
WHERE
-- Alleen orders met afdruk: Bevestiging, Werkbon, Pakbon, Afhaalbon, Verkoopfactuur
(fldBevestigingAfgedrukt <> 0 OR fldWerkbonAfgedrukt <> 0 OR fldPakbonAfgedrukt <> 0 OR fldAfhaalbonAfgedrukt <> 0 OR NOT(fldVerkoopFactuurID IS NULL)) AND
-- Alleen orders met een leverdatum vanaf vandaag
DATEDIFF(D, GETDATE(), vo.fldDatum) >= 0 AND
-- Alleen orders met een leverdatum die maximaal het aantal ingestelde werkdagen na heden is
vo_1.fldVerzendDatum <= GETDATE()
ORDER BY vo.fldDatum, vo.fldOrdernummer;
GO
Het antwoord wordt verkleind weergegeven Show
Antwoorden (0)
  • Er werd nog niet geantwoord op deze discussie
Uw antwoord

iConsult

Lekdijk-West 41

2861 ES Bergambacht

T 0182-309825

M 06-53234924

E

snelstart