Fred Webb
asked on
Pass date range in UNION query
I have a script that UNIONs 3 queries which I then export to Excel. Each query uses the same date range (SOP30200.DOCDATE BETWEEN CONVERT(DATETIME, '2009-02-01', 102) AND CONVERT(DATETIME, '2009-02-15', 102)) to display the products sold within that range, I have to do this twice a month, I would like to find a way to enter the date range just once and have it pass it to all the queries.
SELECT SOP30200.CUSTNAME, SOP30200.CUSTNMBR, SOP30200.FRTAMNT AS Freight_Amt, SOP30200.SHIPMTHD AS SHIPPING_MTHD,
SOP10201.SOPNUMBE AS Invoice_No, SOP30200.DOCDATE AS Invoice_Date, POP30330.ITEMNMBR, POP30330.SERLTNUM,
CASE WHEN IV00101.ITMGEDSC LIKE 'LG%' THEN 'LONG GUN' ELSE ITMGEDSC END AS PRODUCT_TYPE, SOP30300.UNITPRCE AS UNIT_PRICE,
'' AS TAX_PAID, '' AS DATE_PAID, '' AS AMT_PAID, POP30330.DATERECD, POP30300.VENDORID, POP30300.VENDNAME, POP30310.ITEMDESC,
POP30310.PONUMBER AS VENDPONUM
FROM SOP30200 INNER JOIN
SOP10201 ON SOP30200.SOPTYPE = SOP10201.SOPTYPE AND SOP30200.SOPNUMBE = SOP10201.SOPNUMBE INNER JOIN
POP30330 INNER JOIN
POP30310 ON POP30330.POPRCTNM = POP30310.POPRCTNM AND POP30330.ITEMNMBR = POP30310.ITEMNMBR INNER JOIN
POP30300 ON POP30330.POPRCTNM = POP30300.POPRCTNM ON SOP10201.SERLTNUM = POP30330.SERLTNUM AND
SOP10201.ITEMNMBR = POP30330.ITEMNMBR INNER JOIN
SOP30300 ON SOP10201.SOPTYPE = SOP30300.SOPTYPE AND SOP10201.SOPNUMBE = SOP30300.SOPNUMBE AND
SOP10201.LNITMSEQ = SOP30300.LNITMSEQ AND SOP10201.CMPNTSEQ = SOP30300.CMPNTSEQ INNER JOIN
IV00101 ON SOP10201.ITEMNMBR = IV00101.ITEMNMBR
WHERE (SOP10201.SOPTYPE = 3) AND (NOT (SOP30200.CUSTNMBR = 'ATI SERVICE')) AND (IV00101.ITMGEDSC IN ('LG558', 'LG035')) AND
(SOP30200.DOCDATE BETWEEN CONVERT(DATETIME, '2009-02-01', 102) AND CONVERT(DATETIME, '2009-02-15', 102))
UNION ALL
SELECT SOP30200.CUSTNAME, SOP30200.CUSTNMBR, SOP30200.FRTAMNT AS Freight_Amt, SOP30200.SHIPMTHD AS SHIPPING_MTHD,
SOP10201.SOPNUMBE AS Invoice_No, SOP30200.DOCDATE AS Invoice_Date, POP30330.ITEMNMBR, POP30330.SERLTNUM,
CASE WHEN IV00101.ITMGEDSC LIKE 'HG%' THEN 'HAND GUN' ELSE ITMGEDSC END AS PRODUCT_TYPE, SOP30300.UNITPRCE AS UNIT_PRICE,
'' AS TAX_PAID, '' AS DATE_PAID, '' AS AMT_PAID, POP30330.DATERECD, POP30300.VENDORID, POP30300.VENDNAME, POP30310.ITEMDESC,
POP30310.PONUMBER AS VENDPONUM
FROM SOP30200 INNER JOIN
SOP10201 ON SOP30200.SOPTYPE = SOP10201.SOPTYPE AND SOP30200.SOPNUMBE = SOP10201.SOPNUMBE INNER JOIN
POP30330 INNER JOIN
POP30310 ON POP30330.POPRCTNM = POP30310.POPRCTNM AND POP30330.ITEMNMBR = POP30310.ITEMNMBR INNER JOIN
POP30300 ON POP30330.POPRCTNM = POP30300.POPRCTNM ON SOP10201.SERLTNUM = POP30330.SERLTNUM AND
SOP10201.ITEMNMBR = POP30330.ITEMNMBR INNER JOIN
SOP30300 ON SOP10201.SOPTYPE = SOP30300.SOPTYPE AND SOP10201.SOPNUMBE = SOP30300.SOPNUMBE AND
SOP10201.LNITMSEQ = SOP30300.LNITMSEQ AND SOP10201.CMPNTSEQ = SOP30300.CMPNTSEQ INNER JOIN
IV00101 ON SOP10201.ITEMNMBR = IV00101.ITEMNMBR
WHERE (SOP10201.SOPTYPE = 3) AND (NOT (SOP30200.CUSTNMBR = 'ATI SERVICE')) AND (IV00101.ITMGEDSC IN ('HG200','HG140')) AND
(SOP30200.DOCDATE BETWEEN CONVERT(DATETIME, '2009-02-01', 102) AND CONVERT(DATETIME, '2009-02-15', 102))
UNION ALL
SELECT SOP30200.CUSTNAME, SOP30200.CUSTNMBR, SOP30200.FRTAMNT AS Freight_Amt, SOP30200.SHIPMTHD AS SHIPPING_MTHD,
SOP10201.SOPNUMBE AS Invoice_No, SOP30200.DOCDATE AS Invoice_Date, POP30330.ITEMNMBR, POP30330.SERLTNUM,
CASE WHEN IV00101.ITMGEDSC LIKE 'AM%' THEN 'AMMO' ELSE ITMGEDSC END AS PRODUCT_TYPE, SOP30300.UNITPRCE AS UNIT_PRICE,
'' AS TAX_PAID, '' AS DATE_PAID, '' AS AMT_PAID, POP30330.DATERECD, POP30300.VENDORID, POP30300.VENDNAME, POP30310.ITEMDESC,
POP30310.PONUMBER AS VENDPONUM
FROM SOP30200 INNER JOIN
SOP10201 ON SOP30200.SOPTYPE = SOP10201.SOPTYPE AND SOP30200.SOPNUMBE = SOP10201.SOPNUMBE INNER JOIN
POP30330 INNER JOIN
POP30310 ON POP30330.POPRCTNM = POP30310.POPRCTNM AND POP30330.ITEMNMBR = POP30310.ITEMNMBR INNER JOIN
POP30300 ON POP30330.POPRCTNM = POP30300.POPRCTNM ON SOP10201.SERLTNUM = POP30330.SERLTNUM AND
SOP10201.ITEMNMBR = POP30330.ITEMNMBR INNER JOIN
SOP30300 ON SOP10201.SOPTYPE = SOP30300.SOPTYPE AND SOP10201.SOPNUMBE = SOP30300.SOPNUMBE AND
SOP10201.LNITMSEQ = SOP30300.LNITMSEQ AND SOP10201.CMPNTSEQ = SOP30300.CMPNTSEQ INNER JOIN
IV00101 ON SOP10201.ITEMNMBR = IV00101.ITEMNMBR
WHERE (SOP10201.SOPTYPE = 3) AND (NOT (SOP30200.CUSTNMBR = 'ATI SERVICE')) AND (IV00101.ITMGEDSC LIKE 'AM52[01]%') AND
(SOP30200.DOCDATE BETWEEN CONVERT(DATETIME, '2009-02-01', 102) AND CONVERT(DATETIME, '2009-02-15', 102))
ORDER BY 9;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER