Sql 检查表中的所有行在几列中是否都有特定值

Sql 检查表中的所有行在几列中是否都有特定值,sql,tsql,Sql,Tsql,我有一个表[TableABC],列值如下所示。假设该表中的数据总是6行。但是,列值每天都在变化。我想指出,实际上,在TableABC中,[Status]和[SubStatus]至少有十几个唯一的值 场景1预期结果:输入ELSE块 ID |名称|状态|子状态 1 |修道院|同步|相同 2 |亚伯拉罕|同步|不一样 3 |诺亚|不同步|不一样 4 |西蒙|不同步|相同 5 |彼得|同步|相同 6 |锦鲤|同步|相同 场景2预期结果:输入ELSE块 ID |名称|状态|子状态 1 |修道院|同步|不一

我有一个表[TableABC],列值如下所示。假设该表中的数据总是6行。但是,列值每天都在变化。我想指出,实际上,在TableABC中,[Status]和[SubStatus]至少有十几个唯一的值

场景1预期结果:输入ELSE块

ID |名称|状态|子状态 1 |修道院|同步|相同 2 |亚伯拉罕|同步|不一样 3 |诺亚|不同步|不一样 4 |西蒙|不同步|相同 5 |彼得|同步|相同 6 |锦鲤|同步|相同 场景2预期结果:输入ELSE块

ID |名称|状态|子状态 1 |修道院|同步|不一样 2 |亚伯拉罕|同步|不一样 3 |诺亚|同步|不一样 4 |西蒙|同步|不一样 5 |彼得|同步|不一样 6 |锦鲤|同步|不一样 场景3预期结果:输入ELSE块

ID |名称|状态|子状态 1 |修道院|不同步|相同 2 |亚伯拉罕|不同步|相同 3 |诺亚|不同步|相同 4 |西蒙|不同步|相同 5 |彼得|不同步|相同 6 |锦鲤|不同步|相同 场景4预期结果:输入IF块

ID |名称|状态|子状态 1 |修道院|同步|相同 2 |亚伯拉罕|同步|相同 3 |诺亚|同步|相同 4 | Simon |同步|相同 5 |彼得|同步|相同 6 |锦鲤|同步|相同 我想写一个IF子句,当表中的所有行都有[Status]=“in Sync”和[SubStatus]=“Same”时,它进入IF块。因此,在我的示例中,我希望在IF子句中选择场景4,而场景1、2和3应该进入ELSE块

换句话说,我想写一个像这样的IF子句

如果[TableABC]上存在某些条件 打印“[TableABC]中的所有行具有[Status]=同步-和-[SubStatus]=相同” 其他的 打印“[TableABC]中的某些行可能具有同步的[Status]和/或相同的[SubStatus] 我很感激能得到的任何帮助。谢谢。

你可以试试

select top 1 a.* 
   from TableABC a
   where a.Status != 'In Sync'
      OR a.SubStatus != 'Same'

一旦它到达第一条记录,并且其中任一列没有预期的值,它就会返回。如果所有记录分别具有“In Sync”和“Same”,则不会返回任何记录。

我将使用聚合和大小写表达式:

select (case when min(status) = max(status) as min(status) = 'In Sync' and
                  min(substatus) = 'Same'
             then 'All in sync and same'
             else 'Some different'
        end)
from t;

所以我想发布我问题的答案。我从@DRapp&@Larnu那里得到了一些提示。谢谢你们两位和其他人的帮助。非常感谢

如果不存在,请从[dbo].[TableABC]a中选择1 其中,[状态]“同步”或[子状态]“相同” 打印“[TableABC]中的所有行具有[Status]=同步-和-[SubStatus]=相同” 其他的 打印“表ABC中的某些行可能具有同步的[状态]和/或相同的[子状态]”;
使用条件聚合(基本上是sum中的case表达式),您可以确定它们是否完全相同,如果需要,还可以知道有多少行不同

SELECT
  CASE
    WHEN diff_rows > 0 THEN concat(diff_rows, ' rows are different')
    ELSE 'All in sync and same'
  END AS Result
FROM (
    SELECT
      SUM (CASE
             WHEN STATUS = 'In Sync' AND substatus = 'Same' THEN 0
             ELSE 1
           END) AS diff_rows
    FROM mytable
) AS derived

dbfiddle

存在似乎正是您想要的。Just NOT EXISTS从dbo.TableABC中选择1,其中子状态不在“相同”、“同步”中,仍然不清楚您到底想要什么。您能否发布一些示例数据和示例输出,以反映if条件实际如何表现?您所要求的既不是sql也不是plsql??这是什么?@nikhilsugandh:这是SQL。我知道,我提出了这个问题。如果你通读了我所有的问题陈述,然后参考拉努的答案,你就能够理解了。不要用图像代替实际的文本。。。这个问题比现在开始的更糟。如果所有记录的状态都为'In Sync',子状态为'Same',我想执行一些sql代码。你的查询给了我一个选择。你能用IF子句来描述它吗?谢谢你的回复。@GaryTheBrave,你想要达到的最终目标是什么。向用户进行最终演示?您认为在查询中需要IF条件的最终目的是什么。如果我这样做,我将运行查询并获得1条记录或无记录。如果为1,则在应用程序中,只需说所有值都与相同的值同步。vs某人与其他人不同步。你到底想逃避什么。编辑您的原始问题,并给出为什么您希望输出与只需要IF的上下文。另外,显示你认为需要的if块。我在if块中有很多操作要做,比如删除另一个表中的一行,然后重新给它播种等等。这是一个大项目,我一直在这一部分。把整个项目都画出来是没有意义的。我只是需要一个问题的答案。你的回答很接近。谢谢你的帮助。请看我的答案是否有意义。第1行和第2行中as的用法应该是,我认为,缺少一个相等的符号