How to set a default row for a query that returns no rows?

后端 未结 11 1468
青春惊慌失措
青春惊慌失措 2020-12-03 06:43

I need to know how to return a default row if no rows exist in a table. What would be the best way to do this? I\'m only returning a single column from this particular table

11条回答
  •  被撕碎了的回忆
    2020-12-03 07:01

    One table scan method using a left join from defaults to actuals:

    CREATE TABLE [stackoverflow-285666] (k int, val varchar(255))
    
    INSERT  INTO [stackoverflow-285666]
    VALUES  (1, '1-1')
    INSERT  INTO [stackoverflow-285666]
    VALUES  (1, '1-2')
    INSERT  INTO [stackoverflow-285666]
    VALUES  (1, '1-3')
    INSERT  INTO [stackoverflow-285666]
    VALUES  (2, '2-1')
    INSERT  INTO [stackoverflow-285666]
    VALUES  (2, '2-2')
    
    DECLARE @k AS int
    SET @k = 0
    
    WHILE @k < 3
        BEGIN
            SELECT  @k AS k
                   ,COALESCE(ActualValue, DefaultValue) AS [Value]
            FROM    (
                     SELECT 'DefaultValue' AS DefaultValue
                    ) AS Defaults
            LEFT JOIN (
                       SELECT   val AS ActualValue
                       FROM     [stackoverflow-285666]
                       WHERE    k = @k
                      ) AS [Values]
                    ON 1 = 1
    
            SET @k = @k + 1
        END
    
    DROP TABLE [stackoverflow-285666]
    

    Gives output:

    k           Value
    ----------- ------------
    0           DefaultValue
    
    k           Value
    ----------- ------------
    1           1-1
    1           1-2
    1           1-3
    
    k           Value
    ----------- ------------
    2           2-1
    2           2-2
    

提交回复
热议问题