创建组合表和视图的视图

时间:2015-09-04 22:10:31

标签: sql sql-server

我需要创建一个结合表和另一个视图的视图。

该表包含以下字段:

  • 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

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

尝试

  **Different SQL JOINS**
  1.   

    INNER JOIN:当BOTH中至少有一个匹配时返回所有行   表

  2.   

    LEFT JOIN:返回左表中的所有行,并匹配   右表中的行RIGHT JOIN:返回右边的所有行   表,以及左表中匹配的行

  3.   

    FULL JOIN:全部归还   当其中一个表中存在匹配时的行

  4. 你的案子: 使用Left Join

     select a.job_no,a.ap_tax_exempt,b.hard_tax_exempt,b.soft_tax_exempt 
                from table_name a left join View_name b on a.job_no=b.job_no
    

    Sql Joins