现在,下面的查询检索多个产品记录。如何将结果集限制为仅检索每个product_ID的一条记录?多个记录将从不同的产品返回,但每个product_id只需要一个产品线。这是MS SQL 2005基于product_id返回不同的产品
SELECT DISTINCT dbo.Products.Product_ID AS Expr1,
CASE
WHEN dbo.Products.thumbnail IS NULL
OR dbo.Products.thumbnail = ''
THEN dbo.Products.Smimage
ELSE dbo.Products.thumbnail
END AS image ,
dbo.Products.ProductTitle ,
'<img WIDTH="62" src="http://media.companyinc.com/companyinc/SKUimages/small/' + dbo.Products.Smimage + '">' AS URLImage,
dbo.INV_dropshippers_To_ProductOptions.sku ,
dbo.Products.Discontinued ,
dbo.Products.CloseOut ,
dbo.Products.Special ,
dbo.Products.Active ,
dbo.Products.location_id ,
dbo.INV_dropshippers_To_ProductOptions.dropshipper_id ,
dbo.Products.season ,
dbo.Products.thumbnail ,
dbo.Products.Smimage ,
dbo.Products.CustomField2 ,
dbo.Products.pt_type ,
dbo.Products.PartNumber ,
dbo.Products.RetailPrice AS Price ,
dbo.skupurchasedreport.Product_Id ,
dbo.skupurchasedreport.totalprice_date1 ,
dbo.skupurchasedreport.totalprice_date2 ,
dbo.skupurchasedreport.qtypurchased_date1 ,
dbo.skupurchasedreport.qtypurchased_date2 ,
dbo.skupurchasedreport.totalprice_date3 ,
dbo.skupurchasedreport.qtypurchased_date3 ,
dbo.INV_dropshippers_To_ProductOptions.quantity AS currentqty
FROM dbo.Products
INNER JOIN dbo.skupurchasedreport
ON dbo.Products.Product_ID = dbo.skupurchasedreport.Product_Id
LEFT OUTER JOIN dbo.Options AS Options_2
RIGHT OUTER JOIN dbo.INV_dropshippers_To_ProductOptions
ON Options_2.Opt_ID = dbo.INV_dropshippers_To_ProductOptions.option_id3
LEFT OUTER JOIN dbo.Options AS Options_1
ON dbo.INV_dropshippers_To_ProductOptions.option_id2 = Options_1.Opt_ID
LEFT OUTER JOIN dbo.Options
ON dbo.INV_dropshippers_To_ProductOptions.option_id1 = dbo.Options.Opt_ID
ON dbo.Products.Product_ID = dbo.INV_dropshippers_To_ProductOptions.product_id
GROUP BY dbo.skupurchasedreport.Product_Id ,
dbo.INV_dropshippers_To_ProductOptions.product_id ,
dbo.Products.Product_ID ,
dbo.Products.ProductTitle ,
dbo.Products.thumbnail ,
dbo.Products.Smimage ,
dbo.INV_dropshippers_To_ProductOptions.sku ,
dbo.Products.Discontinued ,
dbo.Products.CloseOut ,
dbo.Products.Special ,
dbo.Products.Active ,
dbo.Products.location_id ,
dbo.INV_dropshippers_To_ProductOptions.dropshipper_id,
dbo.Products.season ,
dbo.Products.CustomField2 ,
dbo.Products.pt_type ,
dbo.Products.PartNumber ,
dbo.Products.RetailPrice ,
dbo.skupurchasedreport.Product_Id ,
dbo.skupurchasedreport.totalprice_date1 ,
dbo.skupurchasedreport.totalprice_date2 ,
dbo.skupurchasedreport.totalprice_date1 ,
dbo.skupurchasedreport.totalprice_date3 ,
dbo.skupurchasedreport.qtypurchased_date1 ,
dbo.skupurchasedreport.qtypurchased_date2 ,
dbo.skupurchasedreport.qtypurchased_date3 ,
dbo.INV_dropshippers_To_ProductOptions.quantity
呵呵,我甚至没有看到汇总 – 2010-01-05 15:13:09
@达米尔 - 我通常说当我看到有人写这样的查询时,包括一个它可能包括SUM,AVG等聚合。你可以从这个查询的外观中知道它是错误的。海报正在使用DISTINCT,但由于太多的字段而导致分组。这是一个不理解GROUP BY/Distinct工作方式的问题。 – JonH 2010-01-05 15:50:07
@JonH,同意了。 – 2010-01-05 15:58:46