0

嗨,我有以下存储过程,它返回多个照片名称。我只想返回第一行。我尝试了 TOP 1,但我确定我犯了一些语法错误。请帮忙

CREATE PROCEDURE getProductsBySubCategoryName
    @SubCategoryName nvarchar(50)
AS
BEGIN
SELECT Products.productName, subCategory.subcategoryName, Photos.photoName
    FROM subCategory INNER JOIN Products ON
    subCategory.subcategory_id = Products.subcategory_id
    INNER JOIN Photos ON
    Products.product_id = Photos.product_id
    WHERE (subcategoryName = @SubCategoryName) 
END

还有一个问题。当 photoName 为 null 或为 null photo 选择指定记录时如何选择 -</p>

4

2 回答 2

0

如果您需要每个产品的第一张照片,请尝试以下操作:

CREATE PROCEDURE getProductsBySubCategoryName
    @SubCategoryName nvarchar(50)
AS
BEGIN
    set nocount on;

    ;with ph as (
        select product_id, photoName, row_number() over (partition by product_id order by photoName) pNum
        from Photos
    )   
    SELECT p.productName, sc.subcategoryName, ph.photoName
    FROM subCategory sc
        INNER JOIN Products p ON sc.subcategory_id = p.subcategory_id
        INNER JOIN ph ON p.product_id = ph.product_id and ph.pNum = 1
        WHERE (sc.subcategoryName = @SubCategoryName);
END
于 2013-07-19T10:47:33.533 回答
0

您应该可以通过在 SELECT 后添加“TOP 1”来访问顶部记录。看看这个 url 进行澄清:http ://www.w3schools.com/sql/sql_top.asp 。您还可以指定您得到的确切错误吗?

于 2013-07-18T22:45:20.660 回答