从select语句中返回'Yes'或No'?

时间:2013-11-18 16:26:18

标签: sql tsql

tbl_LoanSummarySample_Number列。我必须检查Sample_Number列是否为空,返回'Y',否则从select语句下面返回'N'。

  select a.Br_Loan_No ,a.Br_LookupKey, //return  IsNull(s.Sample_Number) ='N' or 'Y'                            
  from dbo.tbl_Br a left outer join dbo.tbl_LoanSummary s 
  on s.Loan_no = a.Br_Loan_No order by a.Br_Loan_No

怎么做?

3 个答案:

答案 0 :(得分:3)

您可以使用case表达式...

select a.Br_Loan_No,
    a.Br_LookupKey,
    CASE WHEN s.Sample_Number IS NULL THEN 'N' ELSE 'Y' END AS [HasSample]
from dbo.tbl_Br a left outer join dbo.tbl_LoanSummary s 
on s.Loan_no = a.Br_Loan_No order by a.Br_Loan_No

答案 1 :(得分:0)

您需要使用CASE表达式。它就像是来自传统编程语言的嵌入式if语句或switch语句。

SELECT a.Br_Loan_No,
       a.Br_LookupKey
       CASE
           WHEN s.Sample_Number IS NULL THEN 'N'
           ELSE 'Y'
       END AS sample_number_is_not_null
  FROM dbo.tbl_Br a
  LEFT JOIN dbo.tbl_LoanSummary s
    ON s.Loan_no = a.Br_Loan_No
 ORDER BY a.Br_Loan_no

请注意,您在此处创建计算列,而不是选择现有列的原始值。通常要求您为此列命名,从而使用AS sample_number_is_not_null

CASE表达式有两种形式。一个允许您将列或值与多个选项进行比较。这就像使用隐式等号:

CASE foo
    WHEN 3 THEN 'foo is 3!'
    WHEN 4 THEN 'foo is 4!'
    ELSE 'foo is not 3 or 4'
END

另一种形式,在顶部的示例中,允许您在每个WHEN子句中使用任意表达式。应该注意的是,每个WHEN子句按顺序进行评估,第一个要匹配的子句是THEN用作结果的子句。如果WHEN s都不匹配,则使用ELSE中的结果。

答案 2 :(得分:0)

在Oracle中,您也可以使用

select NVL(s.Sample_Number, 'N')

在空值

的情况下返回N.

(当然,如果不为空,你还需要有东西。)