Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果没有返回行,请选择默认值_Sql_Sql Server - Fatal编程技术网

Sql 如果没有返回行,请选择默认值

Sql 如果没有返回行,请选择默认值,sql,sql-server,Sql,Sql Server,我只选择一列,我的查询肯定只返回0或1行。我想选择一些默认值,如some default,如果没有返回行,则返回值 我试过类似的东西 SELECT Column1 FROM Table1 WHERE PKColumn = SomeValue 但它不起作用 有没有办法在一条SQL语句中实现这一点?我认为您可以使用如下查询: SELECT CASE WHEN COUNT(1) = 1 THEN Column1 ELSE 'Some Default' END AS Column1 FROM T

我只选择一列,我的查询肯定只返回0或1行。我想选择一些默认值,如
some default
,如果没有返回行,则返回值

我试过类似的东西

SELECT Column1 
FROM Table1 
WHERE PKColumn = SomeValue
但它不起作用


有没有办法在一条SQL语句中实现这一点?

我认为您可以使用如下查询:

SELECT CASE WHEN COUNT(1) = 1 THEN Column1 ELSE 'Some Default' END AS Column1 
FROM Table1 
WHERE PKColumn = SomeValue  
GROUP BY Column1
SELECT 
     [Column1] = ISNULL([t2].[Column1], 'Some Default')
FROM 
    [Table1]    AS  [t1]
OUTER APPLY
    (
        SELECT
             [Column1]
        FROM
            [Table1]
        WHERE
                [PKColumn] = [t1].[PKColumn]              
    )           AS  [t2]         
WHERE 
        [t1].[PKColumn] = 'SomeValue'; 
SELECT COALESCE((SELECT TOP 1 Column1 FROM Table1 WHERE PK = SomeValue), 'DefaultValue')

或者将
存在
联合使用

SELECT TOP(1) 
    CASE WHEN EXISTS(SELECT 1 FROM t WHERE PKColumn = SomeValue) THEN Column1 
         ELSE 'Some Default' END AS Column1
FROM t;

我认为您可以使用如下查询:

SELECT 
     [Column1] = ISNULL([t2].[Column1], 'Some Default')
FROM 
    [Table1]    AS  [t1]
OUTER APPLY
    (
        SELECT
             [Column1]
        FROM
            [Table1]
        WHERE
                [PKColumn] = [t1].[PKColumn]              
    )           AS  [t2]         
WHERE 
        [t1].[PKColumn] = 'SomeValue'; 
SELECT COALESCE((SELECT TOP 1 Column1 FROM Table1 WHERE PK = SomeValue), 'DefaultValue')

或者将
存在
联合使用

SELECT TOP(1) 
    CASE WHEN EXISTS(SELECT 1 FROM t WHERE PKColumn = SomeValue) THEN Column1 
         ELSE 'Some Default' END AS Column1
FROM t;

您可以使用
合并

按顺序计算参数并返回参数的当前值 最初计算结果不为NULL的第一个表达式

或者像这样:

SELECT 
     [Column1] = ISNULL([t2].[Column1], 'Some Default')
FROM 
    [Table1]    AS  [t1]
OUTER APPLY
    (
        SELECT
             [Column1]
        FROM
            [Table1]
        WHERE
                [PKColumn] = [t1].[PKColumn]              
    )           AS  [t2]         
WHERE 
        [t1].[PKColumn] = 'SomeValue'; 
SELECT COALESCE((SELECT TOP 1 Column1 FROM Table1 WHERE PK = SomeValue), 'DefaultValue')

您可以使用
合并

按顺序计算参数并返回参数的当前值 最初计算结果不为NULL的第一个表达式

或者像这样:

SELECT 
     [Column1] = ISNULL([t2].[Column1], 'Some Default')
FROM 
    [Table1]    AS  [t1]
OUTER APPLY
    (
        SELECT
             [Column1]
        FROM
            [Table1]
        WHERE
                [PKColumn] = [t1].[PKColumn]              
    )           AS  [t2]         
WHERE 
        [t1].[PKColumn] = 'SomeValue'; 
SELECT COALESCE((SELECT TOP 1 Column1 FROM Table1 WHERE PK = SomeValue), 'DefaultValue')

也许可以尝试使用LEN而不是COUNT来检查Column1是否有值

DECLARE @ReturnValue INT = 3 -- Default value
SELECT TOP 1 @ReturnValue = Column1 FROM Table1 WHERE PK = SomeValue
SELECT @ReturnValue

也许可以尝试使用LEN而不是COUNT来检查Column1是否有值

DECLARE @ReturnValue INT = 3 -- Default value
SELECT TOP 1 @ReturnValue = Column1 FROM Table1 WHERE PK = SomeValue
SELECT @ReturnValue

我认为您需要使用
EXISTS
代替;)。我认为您需要使用
EXISTS
代替;)。