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 |
|
bv2009
Starting Member
3 Posts |
Posted - 2009-01-03 : 08:52:37
|
| Hi,I'm hoping someone can help me with the following sproc.It's giving the error:Msg 4104, Level 16, State 1, Procedure GetProductPricesForDate, Line 17The multi-part identifier "promohis.RawProductPromotionalHistoryId" could not be bound.I think because I am attempting to LEFT JOIN the RawProductPromotionalHistoryLocations table using a reference to the outer table from the derived table, could anyone point me in the right direction?Many thanks!danALTER PROCEDURE [dbo].[GetProductPricesForDate] -- Add the parameters for the stored procedure here @Date datetime, @ProductId uniqueidentifierASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT rpph.RawProductPromotionalHistoryLocationId, rpph.AisleNumber, rpph.RowLetter, rpph.PromotionalLocationStartDate, rpph.PromotionalLocationEndDate, rpph.PromotionalLocationCategoryId, rpph.PromotionalLocationName, rpph.PromotionalLocationIdentifier, ph.[DateTime], p.Name AS 'ProductName', ph.UnitPrice, rp.RawProductId, r.LogoFileName AS 'ShopLogoFileName', r.ShopId, r.Name as 'ShopName', rpph.PromotionalText, rpph.RawProductPromotionalHistoryId, rpph.StartDateTime, rpph.EndDateTime, rpph.PromotionalCategoryId, rpph.Name AS 'PromotionalCategoryName', rpph.Identifier AS 'PromotionalIdentifier', rpph.DepthOfCutPrice, rpph.DepthOfCutPercentage FROM Shops r INNER JOIN RawProducts rp ON rp.[ShopId]=r.ShopId INNER JOIN Products p ON p.[ProductId] = rp.ProductId INNER JOIN RawProductPriceHistory ph ON ph.[RawProductId] = rp.RawProductId INNER JOIN (SELECT RawProductId,MAX([DateTime]) as maxdate FROM RawProductPriceHistory WHERE [DateTime]<=@Date GROUP BY RawProductId )temp ON ph.RawProductId=temp.RawProductId AND ph.[DateTime]=temp.maxdate LEFT JOIN (SELECT promohis.*, promocat.Name, promocat.Identifier, rpphl.RawProductPromotionalHistoryLocationId, rpphl.AisleNumber, rpphl.RowLetter, rpphl.StartDate AS 'PromotionalLocationStartDate', rpphl.EndDate AS 'PromotionalLocationEndDate', rpphl.PromotionalLocationCategoryId, rpphl.Name AS 'PromotionalLocationName', rpphl.Identifier AS 'PromotionalLocationIdentifier' FROM RawProductPromotionalHistory promohis, PromotionalCategories promocat LEFT JOIN (SELECT promohislocs.RawProductPromotionalHistoryLocationId, promohislocs.RawProductPromotionalHistoryId, promohislocs.AisleNumber, promohislocs.RowLetter, promohislocs.StartDate, promohislocs.EndDate, promoloccat.PromotionalLocationCategoryId, promoloccat.Name, promoloccat.Identifier FROM RawProductPromotionalHistoryLocations promohislocs, PromotionalLocationCategories promoloccat WHERE promohislocs.PromotionalLocationCategoryId = promoloccat.PromotionalLocationCategoryId AND promohislocs.StartDate<=@Date AND (promohislocs.EndDate>=@Date OR promohislocs.EndDate IS NULL))rpphl ON rpphl.RawProductPromotionalHistoryId = promohis.RawProductPromotionalHistoryId WHERE promohis.PromotionalCategoryId = promocat.PromotionalCategoryId AND StartDateTime<=@Date AND (EndDateTime>=@Date OR EndDateTime IS NULL))rpph ON rpph.RawProductId=rp.RawProductId WHERE p.ProductId = @ProductId GROUP BY rpph.RawProductPromotionalHistoryLocationId, rpph.AisleNumber, rpph.RowLetter, rpph.PromotionalLocationStartDate, rpph.PromotionalLocationEndDate, rpph.PromotionalLocationCategoryId, rpph.PromotionalLocationName, rpph.PromotionalLocationIdentifier, ph.[DateTime], p.Name, r.Name, ph.UnitPrice, r.ShopId, rp.RawProductId, r.LogoFileName, rpph.PromotionalText, rpph.RawProductPromotionalHistoryId, rpph.StartDateTime, rpph.EndDateTime, rpph.PromotionalCategoryId, rpph.Name, rpph.Identifier, rpph.DepthOfCutPrice, rpph.DepthOfCutPercentage ORDER BY ph.UnitPrice DESCEND |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-03 : 09:07:05
|
To be honest, i couldnt findout reference problem in your query. Are you sure you've field RawProductPromotionalHistoryId in table RawProductPromotionalHistory?ALTER PROCEDURE [dbo].[GetProductPricesForDate] -- Add the parameters for the stored procedure here@Date datetime, @ProductId uniqueidentifierASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for procedure hereSELECT rpph.RawProductPromotionalHistoryLocationId, rpph.AisleNumber, rpph.RowLetter, rpph.PromotionalLocationStartDate, rpph.PromotionalLocationEndDate, rpph.PromotionalLocationCategoryId, rpph.PromotionalLocationName, rpph.PromotionalLocationIdentifier, ph.[DateTime], p.Name AS 'ProductName', ph.UnitPrice, rp.RawProductId, r.LogoFileName AS 'ShopLogoFileName', r.ShopId, r.Name as 'ShopName', rpph.PromotionalText, rpph.RawProductPromotionalHistoryId, rpph.StartDateTime, rpph.EndDateTime, rpph.PromotionalCategoryId, rpph.Name AS 'PromotionalCategoryName', rpph.Identifier AS 'PromotionalIdentifier', rpph.DepthOfCutPrice, rpph.DepthOfCutPercentageFROM Shops rINNER JOIN RawProducts rpON rp.[ShopId]=r.ShopIdINNER JOIN Products pON p.[ProductId] = rp.ProductIdINNER JOIN RawProductPriceHistory phON ph.[RawProductId] = rp.RawProductIdINNER JOIN (SELECT RawProductId,MAX([DateTime]) as maxdateFROM RawProductPriceHistory WHERE [DateTime]<=@DateGROUP BY RawProductId)tempON ph.RawProductId=temp.RawProductIdAND ph.[DateTime]=temp.maxdateLEFT JOIN ( SELECT promohis.*, promocat.Name, promocat.Identifier, rpphl.RawProductPromotionalHistoryLocationId, rpphl.AisleNumber, rpphl.RowLetter, rpphl.StartDate AS 'PromotionalLocationStartDate', rpphl.EndDate AS 'PromotionalLocationEndDate', rpphl.PromotionalLocationCategoryId, rpphl.Name AS 'PromotionalLocationName', rpphl.Identifier AS 'PromotionalLocationIdentifier' FROM RawProductPromotionalHistory promohis, PromotionalCategories promocat LEFT JOIN ( SELECT promohislocs.RawProductPromotionalHistoryLocationId, promohislocs.RawProductPromotionalHistoryId, promohislocs.AisleNumber, promohislocs.RowLetter, promohislocs.StartDate, promohislocs.EndDate, promoloccat.PromotionalLocationCategoryId, promoloccat.Name, promoloccat.Identifier FROM RawProductPromotionalHistoryLocations promohislocs, PromotionalLocationCategories promoloccat WHERE promohislocs.PromotionalLocationCategoryId = promoloccat.PromotionalLocationCategoryId AND promohislocs.StartDate<=@Date AND (promohislocs.EndDate>=@Date OR promohislocs.EndDate IS NULL) )rpphl ON rpphl.RawProductPromotionalHistoryId = promohis.RawProductPromotionalHistoryId WHERE promohis.PromotionalCategoryId = promocat.PromotionalCategoryId AND StartDateTime<=@Date AND (EndDateTime>=@Date OR EndDateTime IS NULL))rpphON rpph.RawProductId=rp.RawProductIdWHERE p.ProductId = @ProductId GROUP BY rpph.RawProductPromotionalHistoryLocationId, rpph.AisleNumber, rpph.RowLetter, rpph.PromotionalLocationStartDate, rpph.PromotionalLocationEndDate, rpph.PromotionalLocationCategoryId, rpph.PromotionalLocationName, rpph.PromotionalLocationIdentifier, ph.[DateTime], p.Name, r.Name, ph.UnitPrice, r.ShopId, rp.RawProductId, r.LogoFileName, rpph.PromotionalText, rpph.RawProductPromotionalHistoryId, rpph.StartDateTime, rpph.EndDateTime, rpph.PromotionalCategoryId, rpph.Name, rpph.Identifier, rpph.DepthOfCutPrice, rpph.DepthOfCutPercentageORDER BY ph.UnitPrice DESCEND |
 |
|
|
bv2009
Starting Member
3 Posts |
Posted - 2009-01-03 : 09:13:33
|
| Hi - thanks for your reply - yup that field is definately in that table! |
 |
|
|
bv2009
Starting Member
3 Posts |
Posted - 2009-01-03 : 09:33:00
|
| Solved it by not doing the left join within the sub-query!Thanks for you help :-) |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-01-03 : 09:45:11
|
| no problem...glad that you sorted it outwould be better to use ansi join syntax though as future SQL server versions wont support old syntax. |
 |
|
|
|
|
|
|
|