如何在oracle的sql语句中加入判断条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在oracle的sql语句中加入判断条件相关的知识,希望对你有一定的参考价值。

参考技术A

decode  、case when  都可以做到

select id,
       decode(id, 1, '壹', 2, '贰', '3', '叁', '其他') case1,
       case
         when id = 1 and 1=1 then
          '壹'
         when id = 2 then
          '贰'
         when id = 3 then
          '叁'
         else
          '其他'
       end case2
  from test_sale

case when 比较灵活,可以多条件判断

LINQ 在 C# 中加入多个条件

【中文标题】LINQ 在 C# 中加入多个条件【英文标题】:LINQ Joining in C# with multiple conditions 【发布时间】:2011-03-02 12:24:22 【问题描述】:

我在 C# 中有一个带有多个条件的 LINQ Joining 语句。

var possibleSegments = 
    from epl in eventPotentialLegs
    join sd in segmentDurations on 
        new  
            epl.ITARequestID, 
            epl.ITASliceNumber, 
            epl.DepartAirportAfter, 
            epl.AirportId_Origin, 
            epl.AirportId_Destination 
         
        equals 
        new  
            sd.ITARequestId, 
            sd.SliceIndex, 
            sd.OriginAirport, 
            sd.DestinationAirport 
        
    where
        epl.DepartAirportAfter > sd.UTCDepartureTime 
        and 
        epl.ArriveAirportBy > sd.UTCArrivalTime
    select new PossibleSegments ArrivalTime = sd.arrivalTime ;

连接无法正常工作。我做错了什么?

【问题讨论】:

我认为这可能会达到不可读的地步是不是错了?这可能只是格式。这完全是题外话,对此我深表歉意。 如果您有答案,请标记它。为了使您的查询正常工作,您需要将变量命名为相同的名称并将它们等同于您的预测(如 Zar Shardan 的回答),并修复您的 where 子句,如 p.campbell 的回答) 【参考方案1】:

据我所知,你只能通过这种方式加入:

var query = from obj_i in set1
join obj_j in set2 on 
    new  
      JoinProperty1 = obj_i.SomeField1,
      JoinProperty2 = obj_i.SomeField2,
      JoinProperty3 = obj_i.SomeField3,
      JoinProperty4 = obj_i.SomeField4
     
    equals 
    new  
      JoinProperty1 = obj_j.SomeOtherField1,
      JoinProperty2 = obj_j.SomeOtherField2,
      JoinProperty3 = obj_j.SomeOtherField3,
      JoinProperty4 = obj_j.SomeOtherField4
    

主要要求是: 您要加入的匿名对象中的属性名称、类型和顺序必须匹配。

您不能在联接中使用 AND、OR 等。只是 object1 等于 object2。

此 LinqPad 示例中的更多高级内容:

class c1 
    
    public int someIntField;
    public string someStringField;
    
    
class c2 
    
    public Int64 someInt64Property get;set;
    private object someField;
    public string someStringFunction()return someField.ToString();
    
    
void Main()

    var set1 = new List<c1>();
    var set2 = new List<c2>();
    
    var query = from obj_i in set1
    join obj_j in set2 on 
        new  
                JoinProperty1 = (Int64) obj_i.someIntField,
                JoinProperty2 = obj_i.someStringField
             
        equals 
        new  
                JoinProperty1 = obj_j.someInt64Property,
                JoinProperty2 = obj_j.someStringFunction()
            
    select new obj1 = obj_i, obj2 = obj_j;

寻址名称和属性顺序很简单,寻址类型可以通过转换/转换/解析/调用方法等来实现。这可能并不总是适用于 LINQ to EF 或 SQL 或 NHibernate,大多数方法调用肯定不会工作,并且将在运行时失败,因此 YMMV(您的里程可能会有所不同)。 这是因为它们被复制到匿名对象中的公共只读属性中,因此只要您的表达式生成正确类型的值,连接属性 - 您应该没问题。

【讨论】:

很确定字段名称需要匹配,如果不匹配,则会出现类型推断错误 谢谢丹尼尔,你是对的,更新了答案以反映你的笔记并添加了另一个更高级的例子。 感谢您提供全面的示例【参考方案2】:

您的and 应该是where 子句中的&amp;&amp;

where epl.DepartAirportAfter >  sd.UTCDepartureTime 
and epl.ArriveAirportBy > sd.UTCArrivalTime

应该是

where epl.DepartAirportAfter >  sd.UTCDepartureTime 
&& epl.ArriveAirportBy > sd.UTCArrivalTime

【讨论】:

【参考方案3】:

如果您不需要相等对象条件,请使用交叉连接序列:

var query = from obj1 in set1
from obj2 in set2
where obj1.key1 == obj2.key2 && obj1.key3.contains(obj2.key5) [...conditions...]

【讨论】:

以上是关于如何在oracle的sql语句中加入判断条件的主要内容,如果未能解决你的问题,请参考以下文章

oracle SQL查询中,如何在where中用条件语句,判断不同情况,追加不同的And条件?

SQL高级查询

关于sql语句添加where条件问题,用java语句

如何在 SQL SERVER 中加入我的条件?

oracleif判断语句

在Mysql中如何插入一个有两个条件的值