Sql server 创建检查多个表中数据的SQL视图

Sql server 创建检查多个表中数据的SQL视图,sql-server,view,Sql Server,View,所以我有一个sql表,它将保存这样一个ID --------------------------------------------------- | RecordID | Date | Price -------------------------------------------------- | 1 | 8/31/2016 | 49 -------------------------------------------------- | 2 | 8/31/2016 | 101 -----

所以我有一个sql表,它将保存这样一个ID

---------------------------------------------------
| RecordID | Date | Price
--------------------------------------------------
| 1 | 8/31/2016 | 49
--------------------------------------------------
| 2 | 8/31/2016 | 101
--------------------------------------------------
我还有另外3个表,它们将保存关于这个ID的信息,并且可以有不同数量的列

Table 1
---------------------------------------------------
| RecordID | Date | Price | Name
--------------------------------------------------
| 1 | 8/31/2016 | 50 | System
--------------------------------------------------
Table 2
---------------------------------------------------
| RecordID | Date | Price | Coupon
--------------------------------------------------
| 2 | 8/31/2016 | 100 | 7
--------------------------------------------------
但是ID在它们之间是分开的。这意味着表1可以有ID 1,然后表2可以有ID 2,依此类推。ID只能存在于三个表中的一个表中

因此,我的愿望是创建一个视图,在该视图中,我可以从原始表中获取ID和价格,并找到该ID存在于哪个表中,然后像这样很好地将其组合在一起

---------------------------------------------------
| RecordID | Date | Price1 | Price2
--------------------------------------------------
| 1 | 8/31/2016 | 49 | 50
--------------------------------------------------
| 2 | 8/31/2016 | 101 | 100
--------------------------------------------------

您可以使用
左侧外部联接
合并
来执行此操作

假设您有一个名为
tRecords
的主表和另外三个名为
tInfo1
tInfo2
tInfo3
的表,它们都有
RecordID
Price
列:

SELECT 
    A.RecordID
    ,A.[Date]
    ,A.Price AS Price1
    ,COALESCE(B.Price,C.Price,D.Price) AS Price2
FROM
    tRecords A
    LEFT OUTER JOIN tInfo1 B
       ON A.RecordID = B.RecordID
    LEFT OUTER JOIN tInfo2 C
       ON A.RecordID = C.RecordID
    LEFT OUTER JOIN tInfo3 D
       ON A.RecordID = D.RecordID

根据表中的数据类型,考虑创建一个视图来组合3个其他表的结果,以生成一个虚拟组合表:

create view vRecordCombo
select RecordId, Date, Price, Name as 'InfoString', NULL as 'InfoValue'
from table1
UNION ALL
select RecordId, Date, Price, NULL as 'InfoString', Coupon as 'InfoValue'
from table2
然后,您可以对组合进行连接,就好像它是一个包含所有记录的表一样