2013-04-23 154 views
1

我的公司常駐pl/sql guru本週休假,我想我會試試這裏的大師和我的問題。我喜歡認爲我的SQL是中等水平,但是,我是新的Oracle。多條件查詢

我有一個具有3列的表:ID [數字(9,2)],名字[VARCHAR2(20)],姓氏[VARCHAR2(25)]

我想寫一個SQL語句能夠支持並返回以下內容:

  1. 如果名字,姓氏& ID匹配=「已登記」
  2. 如果標識缺失或不匹配=「未註冊」
  3. 如果標識&名字匹配,但名字不'='名字不是M ATCH」
  4. 如果標識&名字匹配,但名字不=‘名字不匹配’
  5. 如果ID匹配,但名字&姓氏不=‘姓&名字不匹配’

我可以在多個查詢中做到這一點,但有什麼好玩的。先謝謝你!

回答

0

使用工會返回單個ResultSet

使用函數返回一個字符串,如果給定的條件是:

StringIf(條件,valueToReturnIfTrue,valueToReturnIfFalse)

並在選擇中使用它:

SELECT StringIf(t.fname = t.lname,'true','false')as samenames,StringIf(.. )作爲same2,

請註明如果你喜歡它:)

0

假設你有另一個表cmpTable (cmpId, cmpFirstName, cmpLastName)具有同等列定義和cmpID的PK存儲候選集,

select cmpId 
     CASE 4 * eqID + 2 * eqFN + eqLN 
      WHEN 7 THEN 'Enrolled' 
      WHEN 5 THEN 'FirstName Does Not Match' 
      WHEN 6 THEN 'LastName Does Not Match' 
      WHEN 4 THEN 'FirstName & LastName Does Not Match' 
      ELSE 'Not Enrolled' 
     END 
    from (
       select cmpId 
        , CASE ID  WHEN cmpID   THEN 1 ELSE 0 END eqID 
        , CASE FirstName WHEN cmpFirstName THEN 1 ELSE 0 END eqFN 
        , CASE LastName WHEN cmpLastName THEN 1 ELSE 0 END eqLN 
       from table  t1 
       join cmpTable ct ON (ct.cmpID = t1.ID) 
       union 
       select cmpId 
        , 0  eqID 
        , 0  eqFN 
        , 0  eqLN 
       from cmpTable 
       where not exists (
         select 1 
          from table t2 
         where t2.ID = cmpID 
        ) 
     ) 
     ; 
+0

謝謝大家爲您的迴應。我決定參加聯盟路線......這是最簡單的。 – 2013-04-23 19:31:42