Henk de Heer
Offline
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.
Die orders moeten naar onze distributeur verzonden worden, zodat ze tijdig afgeleverd worden.
De zaterdag en zondag worden niet meegeteld als werkdag.
Aanvaard antwoord
Henk de Heer
Offline
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
/******** 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
AUB inloggen om een reactie te plaatsen
U moet inloggen om te kunnen reageren. Gebruik Login rechts of aanmelden om een account aan te maken als u hier nieuw bent.
Aanmelden »