I need to retrieve data from SQL Server into Excel file with date range parameter. So the end user can enter the date range in specific excel cells and data will refresh bases on that input.
I searched and tried many instructions but it turns out that these solutions apply for basic SQL query (data come from one table only) whereas my SQL query are JOIN query.
The solutions i found but did not work are here: http://kannekens.nl/how-to-use-an-sql-query-with-parameters-in-excel/ How to add parameters to an external data query in Excel which can't be displayed graphically?
Here is the code. The parameter is STORESALESLINE.DATEID
SELECT
T2.*,
T1.[TotalVendors(OB&E)],
T1.[TotalSKUs(OB&E)],
T1.[TotalSalesQty(OB&E)],
T1.[TotalRevenue(-tax-promo)(OB&E)],
T1.[TotalGP(-promo)(OB&E)],
T1.[TotalGP%(OB&E)]
FROM
(SELECT
PRODUCT.CAT1 AS Cat1,
PRODUCT.CAT2 AS Cat2,
PRODUCT.CAT3 AS Cat3,
COUNT(DISTINCT(PRODUCT.VENDORID)) AS 'TotalVendors(OB&E)',
COUNT(DISTINCT(PRODUCT.ITEMID)) AS 'TotalSKUs(OB&E)',
SUM(STORESALESLINE.INVENTQTY) AS 'TotalSalesQty(OB&E)',
SUM(STORESALESLINE.NETAMOUNT) AS 'TotalRevenue(-tax-promo)(OB&E)',
SUM(STORESALESLINE.COSTAMOUNT) AS 'TotalGP(-promo)(OB&E)',
(SUM(STORESALESLINE.NETAMOUNT) - SUM(STORESALESLINE.COSTAMOUNT))/SUM(STORESALESLINE.NETAMOUNT)*100 AS 'TotalGP%(OB&E)'
FROM PRODUCT
JOIN STORESALESLINE
ON PRODUCT.ITEMID = STORESALESLINE.ITEMID
WHERE
YEAR(STORESALESLINE.DATEID) = 2019
AND
(PRODUCT.OWNBRAND = 'OWNBRAND'
OR
PRODUCT.OWNBRAND = 'EXCLUSIVE')
GROUP BY PRODUCT.CAT1, PRODUCT.CAT2, PRODUCT.CAT3) AS T1
JOIN
(SELECT
PRODUCT.CAT1 AS Cat1,
PRODUCT.CAT2 AS Cat2,
PRODUCT.CAT3 AS Cat3,
COUNT(DISTINCT(PRODUCT.VENDORID)) AS 'TotalVendors(All)',
COUNT(DISTINCT(PRODUCT.ITEMID)) AS 'TotalSKUs(All)',
SUM(STORESALESLINE.INVENTQTY) AS 'TotalSalesQty(All)',
SUM(STORESALESLINE.NETAMOUNT) AS 'TotalRevenue(-tax-promo)(All)',
SUM(STORESALESLINE.COSTAMOUNT) AS 'TotalGP(-promo)(All)',
(SUM(STORESALESLINE.NETAMOUNT) - SUM(STORESALESLINE.COSTAMOUNT))/SUM(STORESALESLINE.NETAMOUNT)*100 AS 'TotalGP%(All)'
FROM PRODUCT
JOIN STORESALESLINE
ON PRODUCT.ITEMID = STORESALESLINE.ITEMID
WHERE
YEAR(STORESALESLINE.DATEID) = 2019
GROUP BY PRODUCT.CAT1, PRODUCT.CAT2, PRODUCT.CAT3) AS T2
ON T1.Cat1 = T2.Cat1 AND T1.Cat2 = T2.Cat2 AND T1.Cat3 = T2.Cat3