2017-06-21 49 views
-2

查詢1:那裏的情況下,當條款是 'APP' & 'WEB'。甲骨文OR,AND,NOT條件

SELECT a_date, 
     CASE WHEN A.TOPPAGEID='MLAND' 
       OR (A.PAGEID='B047201' 
       OR B.GROUP3PAGEID='B047201') 
      THEN 'APP' 
      ELSE 'WEB' 
     END AS LB, 
     COUNT(DISTINCT A.SESSIONNAME) AS SN 
FROM A, B 
WHERE A.a_date='20170101' 
AND A.PAGEID=B.PAGEID 
AND A.PAGEID IN ('LAND','MLAND') 
GROUP BY A.a_date, 
CASE WHEN A.TOPPAGEID='MLAND' OR (A.PAGEID='B047201' OR B.GROUP3PAGEID='B047201') THEN 'APP' ELSE 'WEB' END ; 

從查詢嘗試1.提取物 'WEB' 1

SELECT AA.a_date, 
     COUNT(DISTINCT AA.SESSIONNAME) AS SN 
FROM (SELECT * FROM A WHERE a_date ='20170101' AND TOPPAGEID='LAND') AS AB 
    LEFT OUTER JOIN (SELECT * FROM B) AS BB ON (AA.PAGEID=BA.PAGEID) 
WHERE NOT (AA.PAGEID='B047201' OR BB.GROUP3PAGEID='B047201') 
GROUP BY AA.a_date; 

從查詢1

SELECT AA.a_date, 
     COUNT(DISTINCT AA.SESSIONNAME) AS SN 
FROM A, B 
WHERE A.a_date='20170101' 
    AND A.PAGEID=B.PAGEID 
    AND (A.TOPPAGEID='LAND' AND (A.PAGEID!='B047201' OR B.GROUP3PAGEID!='B047201')) 
GROUP BY A.a_date; 
嘗試2.提取 'WEB'

我嘗試從查詢1中提取'WEB',但兩個查詢try1和try2的結果與case-when子句中'WEB'的結果不匹配。你能指導我如何從case-when子句中提取'WEB'嗎?

+0

你能解釋一下真正的問題,不能讓你的觀點。 –

+0

我不明白這一點。這些是不同的查詢,無論他們做什麼,所以,你需要做什麼?你想用不同的方式重寫相同的查詢嗎?爲什麼?請嘗試解釋你需要做什麼 – Aleksej

+0

我改變了我的解釋。我想在case-when子句中提取'WEB'。 @MuhammadNadeem – user2427306

回答

0

我只是想知道什麼

A.TOPPAGEID='MLAND' OR (A.PAGEID='B047201' OR B.GROUP3PAGEID='B047201') 

A OR B逆相反的情況是NOT A AND NOT B這樣:

(NOT A.TOPPAGEID='MLAND') AND (NOT (A.PAGEID='B047201' OR B.GROUP3PAGEID='B047201')) 

或:

A.TOPPAGEID!='MLAND' AND A.PAGEID !='B047201' AND B.GROUP3PAGEID != 'B047201' 
+0

這假設所有列值不爲NULL。這篇文章中沒有這樣的說法。 – mathguy

0
SELECT a_date, 
     CASE WHEN A.TOPPAGEID='MLAND' 
       OR (A.PAGEID='B047201' 
        OR B.GROUP3PAGEID='B047201') 
      THEN 'APP' 
      ELSE 'WEB' 
     END AS LB, 
     COUNT(DISTINCT A.SESSIONNAME) AS SN 
FROM A 
JOIN B ON A.PAGEID=B.PAGEID 
WHERE A.a_date='20170101' 
    AND A.PAGEID IN ('LAND','MLAND') 
    AND CASE WHEN A.TOPPAGEID='MLAND' 
      OR (A.PAGEID='B047201' 
      OR B.GROUP3PAGEID='B047201') 
     THEN 'APP' 
     ELSE 'WEB' END = 'WEB 
GROUP BY A.a_date, 
     CASE WHEN A.TOPPAGEID='MLAND' OR (A.PAGEID='B047201' OR B.GROUP3PAGEID='B047201') THEN 'APP' ELSE 'WEB' END 

或者:

SELECT a_date, 
     CASE WHEN A.TOPPAGEID='MLAND' 
       OR (A.PAGEID='B047201' 
        OR B.GROUP3PAGEID='B047201') 
      THEN 'APP' 
      ELSE 'WEB' 
     END AS LB, 
     COUNT(DISTINCT A.SESSIONNAME) AS SN 
FROM A 
JOIN B ON A.PAGEID=B.PAGEID 
WHERE A.a_date='20170101' 
    AND A.PAGEID IN ('LAND','MLAND') 
    AND (NOT(A.TOPPAGEID='MLAND' 
      OR (A.PAGEID='B047201' 
      OR B.GROUP3PAGEID='B047201')) 
     OR A.TOPPAGEID IS NULL 
     OR A.PAGEID IS NULL 
     OR B.GROUP3PAGEID IS NULL) 
GROUP BY A.a_date, 
     CASE WHEN A.TOPPAGEID='MLAND' OR (A.PAGEID='B047201' OR B.GROUP3PAGEID='B047201') THEN 'APP' ELSE 'WEB' END