在桌子上返回不同

时间:2012-04-14 21:15:42

标签: sql

我有2个表,一个是产品列表,另一个是productID链接的产品图像表。

我已经编写了以下SQL查询但是我不知道如何只返回每个产品的不同内容,因为某些产品有多个图像。

SELECT  p.ProductID, p.Title, pi.FileName
    FROM [Ordering].[Products] p
    JOIN [Ordering].[ProductImages] pi ON p.ProductID =pi.FK_ProductID 
    WHERE p.Title like '%' + @Title +'%'
    ORDER BY p.Title ASC

- 结果

ProductID   Title                 FileName
5           test                  5.jpg
2           test product          4.jpg
2           test product          3.jpg
2           test product          2.jpg
2           test product          1.jpg

如上面的结果我想要做的只是返回2行,即test和testproduct。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以按产品分组并抓取MAX图像(或其他一些方法,具体取决于您想要代表产品的图像):

    SELECT p.ProductID, p.Title, MAX(pi.FileName) as FileName
      FROM [Ordering].[Products] p
INNER JOIN [Ordering].[ProductImages] pi ON p.ProductID =pi.FK_ProductID 
     WHERE p.Title like '%' + @Title +'%'
  GROUP BY p.ProductID, p.Title
  ORDER BY p.Title ASC

演示:http://www.sqlfiddle.com/#!3/6f498/2

答案 1 :(得分:0)

您可以使用逗号分隔的文件路径列表返回不同的产品列表:

SELECT  
    p.ProductID, 
    p.Title, 
    img.ImageFilePaths
FROM [Products] p
JOIN (
SELECT DISTINCT
    t1.ProductID,
    ImageFilePaths = SUBSTRING((SELECT ( ', ' + t2.FileName )
                       FROM [ProductImages] t2
                       WHERE t1.ProductID = t2.ProductID                                                    
                       FOR XML PATH( '' )
            ), 3, 1000 )
            FROM [ProductImages]  t1
        GROUP BY t1.ProductID) img
ON img.ProductID = p.ProductID  

使用@mellamokb小提琴:

http://www.sqlfiddle.com/#!3/a3103/8