Select 语句中的布尔逻辑

Posted

技术标签:

【中文标题】Select 语句中的布尔逻辑【英文标题】:Boolean Logic in Select Statement [duplicate] 【发布时间】:2014-09-02 05:31:17 【问题描述】:

如何在查询运行时在 select 语句中实现布尔逻辑?

SELECT t.[Key]
      ,t.[Parent_Key]
      ,t.[Parent_Code]
      ,t.[Code]
      ,t.[Desc] 
      ,t.[Point]
      ,[isChild] -- If Point > 2, then true, if Point == 1 Then false   
      ,t.[By] 
      ,t.[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter

我想做一些逻辑来根据 t.[Point] 确定 [isChild] 布尔值

【问题讨论】:

CASE 【参考方案1】:
SELECT t.[Key]
      ,t.[Parent_Key]
      ,t.[Parent_Code]
      ,t.[Code]
      ,t.[Desc] 
      ,t.[Point]
      ,CASE WHEN t.[Point] > 2 THEN 1 ELSE  
            CASE WHEN t.[Point] = 1 THEN 0 ELSE NULL END 
       END AS [isChild]
      ,t.[By] 
      ,t.[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter

请注意,当 t.[Point]

【讨论】:

【参考方案2】:

凯斯是你的朋友...

 SELECT Key, Parent_Key, Parent_Code, Code, Desc, point, 
     case when point > 2 then 1 
          when point = 1 then 0 end isChild, 
     [By], [On]
 FROM db.stats  
 WHERE Parent_Key= @tmpParameter

【讨论】:

【参考方案3】:

使用case语句:

SELECT t.[Key]
      ,t.[Parent_Key]
      ,t.[Parent_Code]
      ,t.[Code]
      ,t.[Desc] 
      ,t.[Point]
      ,CASE t.[Point] WHEN 1 THEN FALSE WHEN 2 THEN TRUE END as [isChild]
      ,t.[By] 
      ,t.[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter

【讨论】:

【参考方案4】:

你可以使用 CASE 语句

SELECT t.[Key]
  ,t.[Parent_Key]
  ,t.[Parent_Code]
  ,t.[Code]
  ,t.[Desc] 
  ,t.[Point]
  ,CASE 
  WHEN t.[Point] THEN true 
  else false
  END as isChild
  ,t.[By] 
  ,t.[On]
FROM [db].[stats] t WHERE t.[Parent_Key]= @tmpParameter

【讨论】:

以上是关于Select 语句中的布尔逻辑的主要内容,如果未能解决你的问题,请参考以下文章

布尔逻辑:如何简化此 IF 语句?

JavaSe 程序逻辑控制

如何使用布尔逻辑使这个 if 语句在 python 3 中更简洁?

python-逻辑运算:not\and\or和布尔值:True\False

菜鸟笔记四逻辑语句

SELECT 语句,带有附加逻辑,用于修改某些记录