代码之家  ›  专栏  ›  技术社区  ›  Jake Manet

MSSQL-如果第一次返回0,则运行第二次选择

  •  1
  • Jake Manet  · 技术社区  · 6 年前

    我必须运行第二个select,如果第一个select没有返回任何数据,但是我尝试了什么,它不起作用。

    @Model varchar(50),
    @UserId nvarchar(128),
    @CountryId int
    
    SELECT
            COUNT(1)
        FROM
            Product P
            JOIN Location PC ON P.ProductId = PC.ProductId
            JOIN Users USR ON USR.CountryId = PC.CountryId
        WHERE
            P.Model = @Model AND USR.Id = @UserId
    
    if @@rowcount = 0
        SELECT
            COUNT(1)
        FROM
            Product P
            JOIN Location PC ON P.ProductId = PC.ProductId
        WHERE
            P.Model = @Model AND PC.CountryId = @CountryId
    

    这是两个结果。。。我怎么能只退一个?

    谢谢。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Gordon Linoff    6 年前

    假设您的问题是第一个查询返回的值,而不是行数。

    WITH t1 AS (
          SELECT COUNT(1) as cnt
          FROM Product P JOIN
               Location PC
               ON P.ProductId = PC.ProductId JOIN
               Users USR
               ON USR.CountryId = PC.CountryId
          WHERE P.Model = @Model AND USR.Id = @UserId
         )
    SELECT (CASE WHEN cnt > 0 THEN cnt
                 ELSE (SELECT COUNT(1)
                       FROM Product P JOIN
                            Location PC
                            ON P.ProductId = PC.ProductId
                       WHERE P.Model = @Model AND PC.CountryId = @CountryId
            END) as cnt
    FROM t
    
        2
  •  2
  •   D-Shih    6 年前

    您可以尝试声明一个变量 @Cnt 获取查询金额并签入值。

    @Model varchar(50),
    @UserId nvarchar(128),
    @CountryId int,
    @Cnt INT
    
    SELECT
        @Cnt = COUNT(1)
    FROM
        Product P
        JOIN Location PC ON P.ProductId = PC.ProductId
        JOIN Users USR ON USR.CountryId = PC.CountryId
    WHERE
        P.Model = @Model AND USR.Id = @UserId
    
    if (@Cnt == 0)
    BEGIN
        SELECT
            @Cnt = COUNT(1)
        FROM
            Product P
            JOIN Location PC ON P.ProductId = PC.ProductId
        WHERE
            P.Model = @Model AND PC.CountryId = @CountryId
    END
    
    SELECT @Cnt
    
        3
  •  0
  •   Ross Bush    6 年前

    使用该select语句将无法获得@@rowcount。见 this similar answer 为了澄清。

    SELECT @Count=COUNT(1)