如何编写SQL来检查条件?

时间:2014-04-28 14:52:53

标签: mysql sql sql-server

我需要编写一个可以执行以下操作的SQL代码:

  1. 如果只有一条记录的状态为“待定”,则返回该记录并退出。
  2. 如果有多个记录处于“待处理”状态,请选择最近“Created_date”的记录
  3. 如果没有“待处理”记录且只有“有效”记录,请选择具有最新“created_date”的记录
  4. 如果“待定”和“已批准”记录很少,则应优先使用最近日期的“待处理”记录
  5. 我尝试了CASE语句,但效果不佳。请帮忙。

3 个答案:

答案 0 :(得分:1)

既然你用两种方式标记了它:

Sql Server:

SELECT TOP 1 *
FROM [MyTable]
WHERE Status IN ('Pending', 'Active')
ORDER BY Case WHEN Status='Pending' THEN 0 ELSE 1 END, Created_Date DESC

<强> MySQL的:

SELECT *
FROM `MyTable`
WHERE Status IN ('Pending', 'Active')
ORDER BY Case WHEN Status='Pending' THEN 0 ELSE 1 END, Created_Date DESC
LIMIT 1

答案 1 :(得分:0)

如果我的问题是,我将如何做到这一点:

pending_records =“从status ='pending'”;

的记录中选择count(*)

这将为我提供待处理记录的数量。根据这个数字,我会用“if”语句解决所有其他问题。

if( pending_records == 1){
   Select the record and exit  
}else if ...

并继续其他条件。

我希望这可以帮到你!

答案 2 :(得分:0)

我没有对此进行过测试,但我认为如果你按降序排序并且只获取EACH条件的第一条记录和UNION它们,那么你可以从该结果中取出最高记录。像这样:

SELECT TOP(1) * 
FROM (
    SELECT TOP(1) * 
    FROM Table1
    WHERE Pending = 1
    ORDER BY Created_date DESC
    UNION
    SELECT TOP(1) * 
    FROM Table1 
    WHERE Approved = 1
    ORDER BY Created_date DESC
)

注意:这适用于SQL Server。对于MySQL,我认为它是LIMIT而不是TOP