2016-07-22 3 views
1

Я получаю «Все запросы, объединенные с помощью оператора UNION, INTERSECT или EXCEPT, должны иметь равное количество выражений в своих целевых списках».SQL Query, Insert, Union и Join

INSERT INTO dbo.FactInternetSales (
    ProductKey 
    ,CustomerKey 
    ,DateKey 
    ,OrderQuantity 
    ,UnitPrice 
    ,UnitPriceDiscount 
    ,TaxAmt 
    ,Freight 
    ) 
SELECT ProductKey 
FROM dbo.dimProduct 

UNION ALL 

SELECT CustomerKey 
FROM dbo.dimCustomer 

UNION ALL 

SELECT DateKey 
FROM dbo.dimDate 

UNION ALL 

SELECT D.OrderQty 
    ,D.UnitPrice 
    ,D.UnitPriceDiscount 
    ,H.TaxAmt 
    ,H.Freight 
FROM AdventureWorksLT2008.SalesLT.SalesOrderDetail AS D 
FULL JOIN AdventureWorksLT2008.SalesLT.SalesOrderHeader H ON D.SalesOrderID = H.SalesOrderID 

ответ

0

сообщение об ошибке говорит, что all..Final запрос в союзе все оленья кожа есть столбцы others..You можно попробовать ниже, который работает, так как вы не имеете общих столбцов, чтобы присоединиться в коде

You можете попробовать этот

;With cte 
as 
(
Select ProductKey From dbo.dimProduct 
UNION All 
Select CustomerKey From dbo.dimCustomer 
UNION All 
Select DateKey From dbo.dimDate) 
,cte1 as 
(
Select D.OrderQty, 
    D.UnitPrice, 
    D.UnitPriceDiscount, 
    H.TaxAmt, 
    H.Freight 
From  AdventureWorksLT2008.SalesLT.SalesOrderDetail As D 
FULL JOIN AdventureWorksLT2008.SalesLT.SalesOrderHeader H 
ON D.SalesOrderID = H.SalesOrderID 
) 
select cte.*,cte1.* 
from cte,cte1 
+0

Я не понимаю, ваш код показывает неправильный синтаксис. я понял ошибку, которую я получил, но не смог решить проблему, пытаясь вставить ее в таблицу. – cnayak

+0

См. обновленный. Это работает. Вы также можете использовать соединение, если у них одинаковые столбцы. – TheGameiswar

+0

спасибо, что я смог получить то, что хотел от концепции, которую вы дали. Я удалил объединение всех и использовал WITH cte1, cte2, cte3, cte4, чтобы получить Productkey, CustomerKey, DateKey в разных столбцах. – cnayak

0

Когда я пытаюсь вставить следующим образом я получаю сообщение об ошибке экземпляра SQL Server Database Engine не удается получить ресурс LOCK, в это время. Повторите свое заявление, когда число активных пользователей меньше. Попросите администратора базы данных проверить конфигурацию блокировки и памяти для этого экземпляра или проверить длительные транзакции.

WITH cte1 
AS (
    SELECT ProductKey 
    FROM dbo.dimProduct 
    ) 
    ,cte2 
AS (
    SELECT CustomerKey 
    FROM dbo.dimCustomer 
    ) 
    ,cte3 
AS (
    SELECT DateKey 
    FROM dbo.dimDate 
    ) 
    ,cte4 
AS (
    SELECT D.OrderQty 
     ,D.UnitPrice 
     ,D.UnitPriceDiscount 
     ,H.TaxAmt 
     ,H.Freight 
    FROM AdventureWorksLT2008.SalesLT.SalesOrderDetail AS D 
    FULL JOIN AdventureWorksLT2008.SalesLT.SalesOrderHeader H ON D.SalesOrderID = H.SalesOrderID 
    ) 
INSERT INTO dbo.FactInternetSales (
    ProductKey 
    ,CustomerKey 
    ,DateKey 
    ,OrderQuantity 
    ,UnitPrice 
    ,UnitPriceDiscount 
    ,TaxAmt 
    ,Freight 
    ) 
SELECT cte1.* 
    ,cte2.* 
    ,cte3.* 
    ,cte4.* 
FROM cte1 
    ,cte2 
    ,cte3 
    ,cte4 
+0

Не могли бы вы проверить ошибку @TheGameiswar – cnayak