-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path2-5 Nested Views.sql
More file actions
74 lines (64 loc) · 2.09 KB
/
2-5 Nested Views.sql
File metadata and controls
74 lines (64 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
USE AdventureWorks2016CTP3
GO
CREATE OR ALTER VIEW vSalesOrderDetail AS
SELECT
soh.SalesOrderID,
soh.OrderDate,
soh.DueDate,
soh.Status,
st.Name as SalesTerritory,
cc.CardType,
cc.CardNumber,
soh.SubTotal,
soh.TotalDue,
sod.SalesOrderDetailID,
sod.OrderQty,
sod.UnitPrice,
sod.LineTotal
FROM
Sales.SalesOrderHeader soh
INNER JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID
INNER JOIN Sales.SalesTerritory st ON soh.TerritoryID = st.TerritoryID
INNER JOIN Sales.CreditCard cc ON soh.CreditCardID = cc.CreditCardID;
GO
--Execute Filtered Query against view
SELECT SalesOrderID, SalesOrderDetailID, LineTotal
FROM
vSalesOrderDetail WHERE SalesOrderID IN (43659,43662,43670)
SELECT soh.SalesOrderID, sod.SalesOrderDetailID, sod.LineTotal
FROM
Sales.SalesOrderHeader soh
INNER JOIN Sales.SalesOrderDetail sod ON soh.SalesOrderID = sod.SalesOrderID
WHERE sod.SalesOrderID IN (43659,43662,43670)
GO
--Nesting the View
CREATE VIEW vSalesEmail AS
SELECT
v.SalesOrderID,
v.SalesOrderDetailID,
v.LineTotal,
be.BusinessEntityID,
p.FirstName,
p.LastName,
e.EmailAddress
FROM
vSalesOrderDetail v
LEFT OUTER JOIN Sales.SalesOrderHeader soh ON v.SalesOrderID = soh.SalesOrderID
LEFT OUTER JOIN Sales.SalesPerson sp ON soh.SalesPersonID = sp.BusinessEntityID
LEFT OUTER JOIN Person.BusinessEntity be ON sp.BusinessEntityID = be.BusinessEntityID
LEFT OUTER JOIN Person.Person p ON p.BusinessEntityID = be.BusinessEntityID
LEFT OUTER JOIN Person.EmailAddress e ON e.BusinessEntityID = p.BusinessEntityID;
--Query Example with highly nested view
SELECT
v.SalesOrderID,
soh.AccountNumber,
v.SalesOrderDetailID,
v.LineTotal,
sp.CommissionPct,
v.BusinessEntityID
FROM
vSalesEmail v
INNER JOIN Sales.SalesPerson sp ON v.BusinessEntityID = sp.BusinessEntityID
INNER JOIN Sales.SalesOrderHeader soh ON soh.SalesOrderID = v.SalesOrderID
WHERE
v.SalesOrderID IN (43659,43662,43670);