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.

 All Forums
 SQL Server 2005 Forums
 Transact-SQL (2005)
 Left join on derived table

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 17
The 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!

dan


ALTER PROCEDURE [dbo].[GetProductPricesForDate]
-- Add the parameters for the stored procedure here
@Date datetime,
@ProductId uniqueidentifier
AS
BEGIN
-- 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 DESC

END

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 uniqueidentifier
AS
BEGIN
-- 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 DESC

END
Go to Top of Page

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!
Go to Top of Page

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 :-)
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2009-01-03 : 09:45:11
no problem...glad that you sorted it out
would be better to use ansi join syntax though as future SQL server versions wont support old syntax.
Go to Top of Page
   

- Advertisement -