できるだけ効率的に「結合」したいテーブルが 2 つあります。
最初のテーブルには製品コードがあります。このテーブルのすべての列が必要です。
2nd 製品コードごとに複数の行を持つ、同じ製品コードが含まれています。
製品コードが最初のテーブルの行と一致する 2 番目のテーブル行の最小値と最大値を取得する必要があります。
以下は私がこれまでに持っているものです。これは醜く、おそらく非常に不正確で遅いです。これには750k行があるため、2番目のテーブルが問題です!
ALTER PROCEDURE [dbo].[GetProductDescriptions]
(
@site INT = 0,
@langid INT = 0
)
AS
select p.* ,
stuff((select ',' + cast(FilterValueID as nvarchar(max))from Product_Filter_Mapping c where c.ProductCode = p.ProductCode AND c.ApplicationID = @site for xml path('')),1,1,'') as FilterIDs,
stuff((select ',' + cast(BrandID as nvarchar(max))from Product_Brand_Mapping d where d.ProductCode = p.ProductCode AND d.ApplicationID = @site for xml path('')),1,1,'') as BrandIDs,
stuff((select '|' + cast(Name as nvarchar(max))from Brands e where e.ID IN (SELECT BrandID FROM Product_Brand_Mapping f WHERE f.ProductCode = p.ProductCode AND f.ApplicationID = @site) for xml path('')),1,1,'') as BrandNames,
stuff((select ',' + cast(DepartmentID as nvarchar(max))from Product_Department_Mapping e where e.ProductCode = p.ProductCode and e.ApplicationID = @site for xml path('')),1,1,'') as DepartmentIDs,
(select MAX(pr.Sell) from Products pr where pr.ProductCode = p.ProductCode AND pr.ApplicationID = @site) as SellTo,
(select MAX(pr.WholeSale) from Products pr where pr.ProductCode = p.ProductCode AND pr.ApplicationID = @site) as WasTo
from ProductDescription p WHERE p.ApplicationID = @site AND p.LanguageID = @langid