2015-09-04 115 views
0

我需要創建一個包含表格和另一個視圖的視圖。創建一個包含表格和視圖的視圖

表包含下列字段:

  • job_no
  • ap_tax_exempt

視圖包含以下字段:

  • job_no
  • hard_tax_exempt
  • soft_tax_exempt

棘手的部分是,在視圖中的job_no值在表中的job_no值的子集,當我將這些創建新的看法,我需要確保它們保持獨特。換句話說,如果表格[1,2,3,4,5]和視圖具有[2,3,5],則最終視圖應該具有[1,2,3,4,5]而不是[1 ,2,2,3,3,4,5,5。此外,表中並非所有的job_no值都有相應的hard_tax_exempt和soft_tax_exempt列的值,所以我不確定是否需要對此做些特別的事情,或者SQL是否足夠聰明以自動將NULL分配給那些細胞。

實施例表中的數據:

job_no ap_tax_exempt 
------ ------------- 
    1   True 
    2   True 
    3   False 
    4   False 
    5   True 

實施例視圖數據:

job_no hard_tax_exempt soft_tax_exempt 
------ --------------- --------------- 
    2   taxable   NULL 
    3   nontaxable   NULL 
    4   NULL    taxable 

我需要的最終視圖是這樣的:

job_no ap_tax_exempt hard_tax_exempt soft_tax_exempt 
------ ------------- --------------- --------------- 
    1   True    NULL    NULL 
    2   True    taxable    NULL 
    3   False   nontaxable   NULL 
    4   False    NULL    taxable 
    5   True    NULL    NULL 

任何幫助,將不勝感激。

+0

只是要清楚。你需要幫助來創建SQL,事實之一是一個視圖不應該與問題相關,因爲你知道創建視圖了嗎? –

回答

2
CREATE VIEW vw_NewView 
AS 
SELECT COALESCE(t.job_no, v.job_no) AS job_no 
     ,t.ap_tax_exempt 
     ,v.hard_tax_exempt 
     ,v.soft_tax_exempt 
FROM TableName t 
FULL JOIN ViewName v 
ON t.job_no = v.job_no; 

看到一個Working Demo

+0

@Rahul給定的樣本數據完全連接和左連接都會給出相同的結果。如果你閱讀這個問題,我認爲OP是在完全連接查詢之後。 –

+0

這是正確的。在你的答案中增加了一個小提琴演示。 – Rahul

1

你需要left join因爲不是所有的table記錄有看法。這是一個SQLFiddle Demo,證明它的工作原理。

CREATE VIEW finalView 
AS 
    SELECT T.job_no, 
      T.ap_tax_exempt, 
      V.hard_tax_exempt, 
      V.soft_tax_exempt 
    FROM Table T 
    LEFT JOIN View V 
     ON T.job_no = V.job_no 
+0

@Rahul完成。 TY。 –

+0

我試過這個,但是結果視圖僅包含視圖中的job_no值,而不包含表中的值。所以,回到上面的例子,列有1,2,3而不是1,2,3,4,5。 –

+0

此外,如果你有這個結果'[1,2,2,3,3,4,5,5] .'是因爲你做了一個'INNER JOIN'而不是'LEFT JOIN' –

0

嘗試

**Different SQL JOINS** 
  1. INNER JOIN:返回所有行時,有兩個 表

  2. LEFT JOIN至少一個匹配:返回左表中的所有行以及來自右右表匹配 行JOIN:從右邊 表返回所有行和左表匹配的行

  3. FULL JOIN:返回所有 行當存在一個匹配 使用Left Join

    :表

你的案件

Sql Joins