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  | 
                             
                            
                                    | 
                                         BobbyDigital 
                                        Starting Member 
                                         
                                        
                                        5 Posts  | 
                                        
                                        
                                            
                                            
                                             Posted - 2014-07-29 : 14:05:41
                                            
  | 
                                             
                                            
                                            | Hello all, this is my first time posting and wanted to start off by thanking everyone that reads and offers support. I have never had any formal training on SQL and have learned everything I currently know through trial and error and a bit of research.I work in the retail industry and I am essentially wanting to create a report that compares current inventory to sales data. This will ultimately help us track slow moving or non selling items.The first table I am dealing with is my inventory table and these are the columns that are pertinent to my report.Table name - Inv_QtyColumn names - StoreNumber,Qty_On_Hand,PLU_NUMBasically this is a very large table that holds and inventory record for every UPC we have (PLU_NUM) and stores it in the QTY_ON_HAND field.The second table I will be using is our sales table.Table name - PdetailColumn Names - Stornumber,time_stamp,Detail_for_qty(unit sales),PLUBasically I would like to display the following: StoreNumber,PLU_NUM,QTY_ON_HAND,Sum(Detail_for_qty) for a given time period. If the sales data does not contain the PLU, i would like for it to still display the qty_on_hand but display the sum(detail_for_qty) as 0.The problem that I am having is that if the PLU is not in the sales table it will not display that item at all. Below is my query.select t1.Store,t1.PLU,t1.OnHand,t2.Salesfrom	(select Inv_Qty.PLU_NUM as [PLU],Inv_Qty.QTY_ON_HAND as [OnHand],Inv_Qty.StoreNumber as [Store]	from Inv_Qty	where QTY_ON_HAND <> 0)t1,	(select PDetail.StoreNumber as [Store],PDetail.PLU as [PLU],SUM(pdetail.detail_for_qty) as [Sales]	from PDetail	where DETAIL_CLASS = 1 and YEAR(time_stamp) = 2014	and Dept not in (12,14,15,16,17,18,31)	and Dept < 74	group by StoreNumber,PDetail.PLU)t2where (t1.Store = t2.Store) and (t1.plu = t2.plu) and t2.Sales < 2order by t1.Store ascAny help would be appreciated. Thanks | 
                                             
                                         
                                     | 
                             
       
                            
                       
                          
                            
                                    | 
                                     tkizer 
                                    Almighty SQL Goddess 
                                     
                                    
                                    38200 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-29 : 16:12:18
                                          
  | 
                                         
                                        
                                          | http://www.sqlservercentral.com/articles/Best+Practices/61537/Tara KizerSQL Server MVP since 2007http://weblogs.sqlteam.com/tarad/  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     BobbyDigital 
                                    Starting Member 
                                     
                                    
                                    5 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 08:16:52
                                          
  | 
                                         
                                        
                                          | How nice of you to post a link to a forum that requires registration to even read and apparently is meant to be a lazy way of telling me that I didn't post enough information for you.Judging by your other recent posts it seems that your only goal in this forum is to post the same best practice link over and over again without really helping anyone.Since I am a beginner looking for assistance, and I am unfamiliar with recreating my tables and data via scripts and queries, I guess I will take my questions elsewhere. Hopefully I will find a forum or support site that is more friendly and accepting of newbies.  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     MichaelJSQL 
                                    Constraint Violating Yak Guru 
                                     
                                    
                                    252 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 09:30:06
                                          
  | 
                                         
                                        
                                          | This might be close based on what you described, but I did not test it as I do not have the table structures.SELECT IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUM,PD.Sales	FROM Inv_Qty IQ INNER JOIN 	 (SELECT Stornumber,PLU_NUM,SUM(Pdetail) Sales	  FROM Pdetail	  WHERE DETAIL_CLASS = 1 and YEAR(time_stamp) = 2014		and Dept not in (12,14,15,16,17,18,31)		and Dept < 74	  GROUP BY  Stornumber,PLU_NUM	  HAVING SUM(Pdetail) < 2	  ) PD ON PD.Stornumber = IQ.Stornumber AND PD.PLU_NUM =  IQ.PLU_NUMWHERE IQ.Qty_On_Hand !=0 GROUP BY  IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUMIf you are using SSMS (sql server management studio) you can right click on an object and select 5thoption down, "SCRIPT AS"  and follow the tree to CREATE AS  to new window and you can get a copy of your DDLas long as you have view definition.  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     BobbyDigital 
                                    Starting Member 
                                     
                                    
                                    5 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 11:11:19
                                          
  | 
                                         
                                        
                                          | Thank you Michael for taking the time to show me the options in SSMS that will help me create the information you may need. Below are the create scripts for the two tables.I cleaned up your script to match the table names and it didn't error but did not pull all of the data I needed it toWould there also be a way through SSMS to script out some sample data in a similar fashion?Basically the biggest problem is that the two tables need linked both on PLU and on Storenumber to match the Quantity on Hand with the sales. Both of these columns will be in the data in the INV_QTY table, but we may not be able to find matching PLU entries in the PDETAIL table if the item was never sold during the given time period.Pdetail/****** Object:  Table [dbo].[PDetail]    Script Date: 07/30/2014 10:29:29 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[PDetail](	[CGS_Acct] [varchar](50) NULL,	[CUR_PRC] [money] NULL,	[FUEL_Z_COUNTER] [bigint] NULL,	[ID] [int] IDENTITY(1,1) NOT NULL,	[Inv_Asset] [varchar](50) NULL,	[Misc_Flags] [bigint] NULL,	[RECEIPT_NUM] [bigint] NULL,	[Sale_Acct] [varchar](50) NULL,	[Serial_Num] [varchar](50) NULL,	[Serial_Type] [bigint] NULL,	[TIME_STAMP] [datetime] NULL,	[SOURCE_CLASS] [bigint] NULL,	[SOURCE_ID] [bigint] NULL,	[DETAIL_CLASS] [bigint] NULL,	[DETAIL_TYPE] [bigint] NULL,	[EMP_ID] [int] NULL,	[MODE_FLAGS] [bigint] NULL,	[REG_NUM] [int] NULL,	[REG_Z_COUNTER] [bigint] NULL,	[CSHR_NUM] [int] NULL,	[CSHR_Z_COUNTER] [bigint] NULL,	[PLU] [varchar](50) NULL,	[DEPT] [int] NULL,	[DETAIL_AT_QTY] [float] NULL,	[DETAIL_FOR_QTY] [float] NULL,	[DETAIL_ITEM_PRC] [money] NULL,	[DETAIL_LINE_AMT] [money] NULL,	[ITEM_COST] [money] NULL,	[AVG_COST] [money] NULL,	[BUYDOWN_AMT] [money] NULL,	[BUYDOWN_ID] [bigint] NULL,	[COSTPLUSDISC_AMT] [money] NULL,	[CUR_ONHAND_QTY] [money] NULL,	[CUSTDEPTDISC_AMT] [money] NULL,	[EXCISE_TAX] [money] NULL,	[KIT_QTY] [money] NULL,	[KITUPC] [varchar](50) NULL,	[MIXMATCH_AMT] [money] NULL,	[PERCENT_DISCT] [money] NULL,	[PROMO_AMT] [money] NULL,	[PROMO_ID] [bigint] NULL,	[SUBTOTAL_DISCT] [money] NULL,	[SYSDISCOUNT_AMT] [money] NULL,	[SYSDISCOUNT_ID] [bigint] NULL,	[TRANSFERRED] [bit] NULL,	[VERSION_FLAG] [int] NULL,	[RT_RECEIPT_NUM] [bigint] NULL,	[RT_REG_NUM] [int] NULL,	[RT_CSHR_NUM] [int] NULL,	[CUST_ID] [varchar](50) NULL,	[SubAcctID] [bigint] NULL,	[PUMP_NUM] [varchar](50) NULL,	[ezExported] [bit] NULL,	[CorpExported] [bit] NULL,	[StoreNumber] [int] NULL,	[StoreRowID] [int] NULL, CONSTRAINT [PK_PDetail] PRIMARY KEY CLUSTERED (	[ID] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[PDetail] ADD  CONSTRAINT [DF__PDetail__TRANSFE__308E3499]  DEFAULT ((0)) FOR [TRANSFERRED]GOALTER TABLE [dbo].[PDetail] ADD  CONSTRAINT [DF__PDetail__ezExpor__318258D2]  DEFAULT ((0)) FOR [ezExported]GOALTER TABLE [dbo].[PDetail] ADD  CONSTRAINT [DF_PDetail_CorpExported]  DEFAULT ((0)) FOR [CorpExported]GOALTER TABLE [dbo].[PDetail] ADD  CONSTRAINT [DF_PDetail_StoreNumber]  DEFAULT ([dbo].[funcGetStoreNum]()) FOR [StoreNumber]GOALTER TABLE [dbo].[PDetail] ADD  DEFAULT ((0)) FOR [StoreRowID]GOINV_QTY/****** Object:  Table [dbo].[Inv_Qty]    Script Date: 07/30/2014 10:28:23 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[Inv_Qty](	[ROW_ID] [int] IDENTITY(1,1) NOT NULL,	[PLU_NUM] [varchar](50) NOT NULL,	[QTY_ON_HAND] [float] NULL,	[QTY_RECEIVED] [float] NULL,	[QTY_SOLD] [float] NULL,	[QTY_ADJUSTED] [float] NULL,	[QTY_TRANSFERRED] [float] NULL,	[LAST_PHY_QTY] [float] NULL,	[LAST_PHY_TIME] [datetime] NULL,	[SOLD_SINCE_CLEAR] [float] NULL,	[ADJUSTS_SINCE_CLEAR] [float] NULL,	[TIME_CLEARED] [datetime] NULL,	[INV_IN_PROGRESS] [int] NULL,	[QTY_ON_ORDER] [float] NULL,	[ezExported] [bit] NULL,	[StoreNumber] [int] NULL,	[CorpExported] [bit] NULL, CONSTRAINT [Inv_Qty$PrimaryKey] PRIMARY KEY CLUSTERED (	[ROW_ID] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 80) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFGOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_ON___45BE5BA9]  DEFAULT ((0)) FOR [QTY_ON_HAND]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_REC__46B27FE2]  DEFAULT ((0)) FOR [QTY_RECEIVED]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_SOL__47A6A41B]  DEFAULT ((0)) FOR [QTY_SOLD]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_ADJ__489AC854]  DEFAULT ((0)) FOR [QTY_ADJUSTED]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_TRA__498EEC8D]  DEFAULT ((0)) FOR [QTY_TRANSFERRED]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__LAST_PH__4A8310C6]  DEFAULT ((0)) FOR [LAST_PHY_QTY]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__SOLD_SI__4B7734FF]  DEFAULT ((0)) FOR [SOLD_SINCE_CLEAR]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__ADJUSTS__4C6B5938]  DEFAULT ((0)) FOR [ADJUSTS_SINCE_CLEAR]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__INV_IN___4D5F7D71]  DEFAULT ((0)) FOR [INV_IN_PROGRESS]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__QTY_ON___4E53A1AA]  DEFAULT ((0)) FOR [QTY_ON_ORDER]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF__Inv_Qty__ezExpor__4F47C5E3]  DEFAULT ((0)) FOR [ezExported]GOALTER TABLE [dbo].[Inv_Qty] ADD  CONSTRAINT [DF_InvQty_StoreNumDef]  DEFAULT ([dbo].[funcGetStoreNum]()) FOR [StoreNumber]  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     MichaelJSQL 
                                    Constraint Violating Yak Guru 
                                     
                                    
                                    252 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 12:00:19
                                          
  | 
                                         
                                        
                                          | Would there also be a way through SSMS to script out some sample data in a similar fashion? You probably don't want to script out you data unless you obfuscate it in some way. in SSMS there is not a way to script out data as far as I know, but in visual studio there is. I usually write a script example:SELECT 'INSERT INTO TABLE X VALUES(''' + ClaimNumber + ''',''' + CAST(ClaimDate as Varchar(20)) + ''')'FROM Core.ClaimTableI will create your tables and put in some test data and try this out, but what you are describing lens itself toward a Left join. SELECT IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUM,PD.SalesFROM Inv_Qty IQLEFT JOIN (SELECT Stornumber,PLU_NUM,SUM(Pdetail) SalesFROM PdetailWHERE DETAIL_CLASS = 1 and YEAR(time_stamp) = 2014and Dept not in (12,14,15,16,17,18,31)and Dept < 74GROUP BY Stornumber,PLU_NUMHAVING SUM(Pdetail) < 2) PD ON PD.Stornumber = IQ.Stornumber AND PD.PLU_NUM = IQ.PLU_NUMWHERE IQ.Qty_On_Hand !=0 GROUP BY IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUM-- this will bring back all the rows in Inv_Qty, but only those matching rows in the subquery. I will lokk at this later  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     BobbyDigital 
                                    Starting Member 
                                     
                                    
                                    5 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 14:36:06
                                          
  | 
                                         
                                        
                                          | Michael, thanks so much for being patient with me and helping me out. I was able to clean up a few things and add a case statement to remove the Null entries with 0s. Here is the final script that I ended up with and everything seems to be working like I wanted it to.Is there a kudos button or anything on this forum that will give you any preference points? You have been a big help and I appreciate it.SELECT IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUM,Case when PD.Sales is null then '0'ELSE PD.SalesEnd	FROM Inv_Qty IQ left JOIN 	(SELECT pdetail.StoreNumber,PDetail.PLU,SUM(DETAIL_FOR_QTY) as [Sales]	FROM Pdetail	WHERE DETAIL_CLASS = 1 and YEAR(time_stamp) = 2014	and Dept not in (12,14,15,16,17,18,31)	and Dept < 74	GROUP BY StoreNumber,PLU	HAVING SUM(DETAIL_FOR_QTY) < 2	) PD ON PD.StoreNumber = IQ.Storenumber AND PD.PLU = IQ.PLU_NUMWHERE IQ.Qty_On_Hand !=0 GROUP BY IQ.StoreNumber,IQ.Qty_On_Hand,IQ.PLU_NUM,pd.salesorder by IQ.StoreNumber,IQ.PLU_NUM asc  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     BobbyDigital 
                                    Starting Member 
                                     
                                    
                                    5 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 16:21:08
                                          
  | 
                                         
                                        
                                          | The data appeared to be better at first because more items were being returned from the query, but after further investigation it doesn't appear that the # of sales is being reported properly.here is a snippet of the dataStoreNumber     Qty_On_Hand	PLU_NUM	           sales1	        21	        008660007322       0This PLU actually has 3 sales within the past week.  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                       
                          
                            
                                    | 
                                     MichaelJSQL 
                                    Constraint Violating Yak Guru 
                                     
                                    
                                    252 Posts  | 
                                    
                                      
                                        
                                          
                                           
                                            Posted - 2014-07-30 : 18:21:52
                                          
  | 
                                         
                                        
                                          | Happy to help.  | 
                                         
                                        
                                            | 
                                         
                                       
                                     | 
                                   
                            
                            
                                | 
                                    
                                      
                                     
                                    
                                 | 
                             
                         
                     | 
                 
             
         |   
     
     
            
              
	     |  
		
			
     
          
		 |