AdventureWorks2014のデータを使用して、新しいデータベースに3つのビューを作成しました。 3つのビューはすべてコンパイルされ保存されますが、問題はありません。しかし、3つすべてを含めて1つの完全なビューを作成しようとすると、何も動作していないようです。以前のビューをSQLで統合したビューを作成
ビューcreation
、creation2
とcreation3
:私はスタックに読んだとして
ALTER VIEW [creation] AS
SELECT sd.ProductID, YEAR(sh.OrderDate) AS 'Year',
MONTH(sh.OrderDate)AS 'Month', DAY(sh.OrderDate) AS 'Day',
sd.UnitPrice AS 'Value', sd.OrderQty AS 'Quantity', NULL AS 'col7',
NULL AS 'col8'
FROM AW2014.Sales.SalesOrderHeader AS sh
INNER JOIN AW2014.Sales.SalesOrderDetail AS sd
ON sd.SalesOrderID = sh.SalesOrderID
INNER JOIN AW2014.Sales.Customer AS c
ON c.CustomerID = sh.CustomerID
INNER JOIN AW2014.Person.Person AS p
ON p.BusinessEntityID = c.PersonID
WHERE p.PersonType LIKE 'IN'
ALTER VIEW [creation2]AS
SELECT p.FirstName, p.MiddleName, p.LastName,
CONCAT(a.AddressLine1, ' ',a.AddressLine2,', ',a.City) AS 'Address',
cr.Name, NULL AS 'col6', NULL AS 'col7', NULL AS 'col8'
FROM AW2014.Person.Person AS p
INNER JOIN AW2014.Person.BusinessEntityAddress AS bea
ON p.BusinessEntityID= bea.BusinessEntityID
INNER JOIN AW2014.Person.Address AS a
ON bea.AddressID = a.AddressID
INNER JOIN AW2014.Person.StateProvince AS sp
ON a.StateProvinceID = sp.StateProvinceID
INNER JOIN AW2014.Person.CountryRegion AS cr
ON sp.CountryRegionCode = cr.CountryRegionCode
WHERE p.PersonType LIKE 'IN'
ALTER VIEW [creation3] AS
SELECT DISTINCT p1.ProductID, p1.Name AS 'Product', pc.Name AS 'Category',
sc.Name AS 'Subcategory',
p1.StandardCost, p1.Color, p1.Weight, CONCAT(p1.SizeUnitMeasureCode,', ',p1.WeightUnitMeasureCode) AS 'Units'
FROM AW2014.Production.Product AS p1
INNER JOIN AW2014.Production.ProductSubcategory AS sc
ON p1.ProductSubcategoryID = sc.ProductSubcategoryID
INNER JOIN AW2014.Production.ProductCategory AS pc
ON pc.ProductCategoryID = sc.ProductCategoryID
INNER JOIN AW2014.Sales.SalesOrderDetail AS sd
ON p1.ProductID = sd.ProductID
INNER JOIN AW2014.Sales.SalesOrderHeader AS sh
ON sd.SalesOrderID = sh.SalesOrderID
INNER JOIN AW2014.Sales.Customer AS c
ON sh.CustomerID = c.CustomerID
INNER JOIN AW2014.Person.Person AS p
ON c.PersonID = p.BusinessEntityID
WHERE p.PersonType LIKE 'IN'
私はすべてのビューを作ったが、私はunion
ステートメントを使用する必要がある場合は、列の同じ量を持っています。私はこのようにした:
CREATE VIEW [a] AS
SELECT * FROM [creation2]
UNION ALL
SELECT * FROM [creation]
私は私のコマンドが正常に完了したというメッセージが表示されます。しかし、私がSELECT * FROM [a]
にしようとすると、結果は無限に実行されます。ドロップダウンメニューでdbo.a
をチェックした後、最初のビュー(この場合はcreation2
)のものだけが表示されます。これは、union
またはunion all
ステートメントを無視する(または実行できない)かのようです。
JOIN
を使用して、それぞれのビューにp.PersonType
列を追加してそれらを結合しようとしました。私はそれらを選択していた限りうまくいっていましたが、それらを新しいビューに入れようとしたとき、ビューには別個のカラムが必要であるというエラーが発生しました。もし私がそれにすべて参加したいのであれば、それを明確にすることはできないのですか? いずれにしても、私の質問は立っています。上記3つのオプションをすべて失敗したと考えて、3つの意見をすべて新しいものに入れてもいいですか?多分あなたはいくつかのヒントを持っています、多分私のコードでいくつかの間違いを犯しましたか?以前はSQLを使用していましたが、何年も前からSQLを使用していました。
私はMicrosoft SQLServer Management Studio 2017 btwを使用しています。ありがとうございました!
コードは問題ありません。ビューは機能しています。最適化はあなたが期待するものではありません。返される行は、最初のビューから来る傾向があります。 。 。もっと見るにはスクロール(たくさん)しなければならないかもしれません。 –
異なる列とタイプのものは結合できません。彼らが同じでない場合は、ビューも作成されたことを奇妙に思う。あなたが達成しようとしていることを、なぜこれがうまくいかないのか不思議ではなく、特にあなたが非常に異なるものである組合や結合を試しているのであれば、説明することができます。 –
@GordonLinoffはい、私はスクロールする場所がありませんか?新しいビュー[a]は私に何も表示されません。それを選択しても実行されません。そして、私のデータベースのドロップダウンメニューでは、私はすべての列を見ることができます(それらのうちの8つだけです)。そしてそれらは[creation2]からちょうどです:( – Jake