Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
sjamesje
Starting Member
7 Posts |
Posted - 2004-04-14 : 17:58:17
|
| I am trying to write a query that will accept conditional parameters, where if there is data in one parameter,but not in the other, that it will fill the result set with the specific result set passed to it, but all of the available data from the other result set. For example, I have two parameters, Store # and Category ID. Store ID is 7700 and Category ID is 02. When I execute my query, I get all items for Store # 7700 in category 02. If however, I want to get a result set from store # 7700 but from all categories, I set 7700 as my first parameter and I leave the category ID blank, I get a strange mix off all stores and categories. What is the best way to go about this? Here is my query...any help that you can offer would be appreciated, thanks in advance!---------------------------------------------------------------------/*CREATE PROCEDURE MPSFINAL (@STORE_ID VARCHAR(10), @CATEGORY_ID VARCHAR(10), @START_DATE DATETIME, @END_DATE DATETIME)*/BEGIN--SET THE DATE FORMAT TO IGNORE THE TIMESET DATEFORMAT MDYDECLARE @STORE_ID VARCHAR(10)DECLARE @CATEGORY_ID VARCHAR(10)DECLARE @START_DATE DATETIMEDECLARE @END_DATE DATETIMESET @STORE_ID = '7700'SET @CATEGORY_ID = '02'SET @START_DATE = '1/10/2004'SET @END_DATE = '1/10/2004'SET @START_DATE=CAST(DATEPART(MM, @START_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(DD, @START_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(YY, @START_DATE)AS VARCHAR(4))SET @END_DATE=CAST(DATEPART(MM, @END_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(DD, @END_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(YY, @END_DATE)AS VARCHAR(4))IF (@STORE_ID <>'') AND (@CATEGORY_ID <>'')BEGIN SELECT COALESCE (srprd.STORE_ID, srpackxref.STORE_ID) AS STORE_NUMBER, COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) AS DBR_DATE, srpackxref.CATEGORY_ID + srprd.CATEGORY_ID AS CATEGORY, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE) AS UPC_CODE, srpackxref.DESCRIPTION + srprd.PRODUCT_DESC AS DESCRIPTION, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) AS MULTIPLIER, COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS DEALS_SOLD, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS SINGLES_SOLD FROM srpackxref FULL OUTER JOIN srprd ON srpackxref.MULTIPLIER = srprd.MULTIPLIER AND srpackxref.PRODUCT_NUM = srprd.PRODUCT_NUM AND srpackxref.STORE_ID = srprd.STORE_ID AND srpackxref.DBR_DATE = srprd.DBR_DATEWHERE (COALESCE (srprd.STORE_ID, srpackxref.STORE_ID) = @STORE_ID) AND (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) >= @START_DATE) AND (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) <= @END_DATE) AND (srpackxref.CATEGORY_ID + srprd.CATEGORY_ID = @CATEGORY_ID)GROUP BY COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srprd.STORE_ID, srpackxref.STORE_ID), COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE), srpackxref.CATEGORY_ID + srprd.CATEGORY_ID, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE), srpackxref.DESCRIPTION + srprd.PRODUCT_DESC, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER), (COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER))ENDELSESELECT COALESCE (srprd.STORE_ID, srpackxref.STORE_ID) AS STORE_NUMBER, COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) AS DBR_DATE, srpackxref.CATEGORY_ID + srprd.CATEGORY_ID AS CATEGORY, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE) AS UPC_CODE, srpackxref.DESCRIPTION + srprd.PRODUCT_DESC AS DESCRIPTION, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) AS MULTIPLIER, COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS DEALS_SOLD, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS SINGLES_SOLD FROM srpackxref FULL OUTER JOIN srprd ON srpackxref.MULTIPLIER = srprd.MULTIPLIER AND srpackxref.PRODUCT_NUM = srprd.PRODUCT_NUM AND srpackxref.STORE_ID = srprd.STORE_ID AND srpackxref.DBR_DATE = srprd.DBR_DATEWHERE (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) >= @START_DATE) AND (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) <= @END_DATE) GROUP BY COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srprd.STORE_ID, srpackxref.STORE_ID), COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE), srpackxref.CATEGORY_ID + srprd.CATEGORY_ID, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE), srpackxref.DESCRIPTION + srprd.PRODUCT_DESC, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER), (COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER))END |
|
|
derrickleggett
Pointy Haired Yak DBA
4184 Posts |
Posted - 2004-04-14 : 21:20:27
|
| CREATE PROCEDURE MPSFINAL (@STORE_ID VARCHAR(10),@CATEGORY_ID VARCHAR(10),@START_DATE DATETIME,@END_DATE DATETIME)ASBEGIN--SET THE DATE FORMAT TO IGNORE THE TIMESET DATEFORMAT MDYDECLARE @STORE_ID VARCHAR(10)DECLARE @CATEGORY_ID VARCHAR(10)DECLARE @START_DATE DATETIMEDECLARE @END_DATE DATETIMESET @STORE_ID = '7700'SET @CATEGORY_ID = '02'SET @START_DATE = '1/10/2004'SET @END_DATE = '1/10/2004'SET @START_DATE=CAST(DATEPART(MM, @START_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(DD, @START_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(YY, @START_DATE)AS VARCHAR(4))SET @END_DATE=CAST(DATEPART(MM, @END_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(DD, @END_DATE)AS VARCHAR(2))+'/'+ CAST(DATEPART(YY, @END_DATE)AS VARCHAR(4))IF (@STORE_ID <>'') AND (@CATEGORY_ID <>'')BEGIN SELECT COALESCE (srprd.STORE_ID, srpackxref.STORE_ID) AS STORE_NUMBER, COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) AS DBR_DATE, srpackxref.CATEGORY_ID + srprd.CATEGORY_ID AS CATEGORY, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE) AS UPC_CODE, srpackxref.DESCRIPTION + srprd.PRODUCT_DESC AS DESCRIPTION, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) AS MULTIPLIER, COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS DEALS_SOLD, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER) AS SINGLES_SOLD FROM srpackxref FULL OUTER JOIN srprd ON srpackxref.MULTIPLIER = srprd.MULTIPLIER AND srpackxref.PRODUCT_NUM = srprd.PRODUCT_NUM AND srpackxref.STORE_ID = srprd.STORE_ID AND srpackxref.DBR_DATE = srprd.DBR_DATEWHERE (@STORE_ID = '' OR (COALESCE (srprd.STORE_ID, srpackxref.STORE_ID) = @STORE_ID)) AND (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) >= @START_DATE) AND (COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE) <= @END_DATE) AND (@CATEGORY = '' OR srpackxref.CATEGORY_ID + srprd.CATEGORY_ID = @CATEGORY_ID))GROUP BY COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srprd.STORE_ID, srpackxref.STORE_ID), COALESCE (srpackxref.DBR_DATE, srprd.DBR_DATE), srpackxref.CATEGORY_ID + srprd.CATEGORY_ID, COALESCE (srpackxref.UPC_CODE, srprd.UPC_CODE), srpackxref.DESCRIPTION + srprd.PRODUCT_DESC, COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER), COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER), (COALESCE (srpackxref.MULTIPLIER, srprd.MULTIPLIER) * COALESCE (srpackxref.QTY_SOLD, srprd.QTY_SOLD / srprd.MULTIPLIER))This might be some of the most screwed up code I've ever seen in my life. What in the world are you doing with this????MeanOldDBAderrickleggett@hotmail.comWhen life gives you a lemon, fire the DBA. |
 |
|
|
sjamesje
Starting Member
7 Posts |
Posted - 2004-04-15 : 10:29:35
|
| HaHaHa!!! I agree, it IS the most screwed up code I've ever written! But it's the only thing that me and my team was able to come up with to pull the data from this craptastic database that we've been blessed with! This database is nowhere NEAR normalized... |
 |
|
|
|
|
|
|
|