2013-11-20 2 views
0

У меня есть 2 SQL Select Queries, которые мне нужны в двух столбцах seperare. Код, который я сейчас сделал, делает именно это, но он также дает 2 нуля. Вот мой код:SQL Select Statement SubSelect не работает правильно

Select a.Budget, b.Actual_Income FROM 

(Select sum(subscriptions.Bill_Amount) as Budget 
From imis.dbo.Name Name INNER JOIN imis.dbo.Subscriptions Subscriptions ON  Name.ID=Subscriptions.ID 
Where Member_Type = 'MM' and Name.Status = 'a' and Product_Code = 'Annual' and Subscriptions.Status = 'a') AS a 

FULL JOIN 

(SELECT sum(Amount * -1) as Actual_Income 
FROM imis.dbo.Name Name INNER JOIN imis.dbo.Trans Trans ON Name.ID=Trans.BT_ID 
WHERE PRODUCT_CODE ='ANNUAL' and Transaction_Date >= '21/10/2013' and Batch_Num <> 'DD131031-3') AS b 
ON a.Budget = b.Actual_Income 

Это то, что он возвращает

Budget   Actual_Income 
6367005.00  NULL 
NULL   665712.37 

Любая помощь очень ценится!

ответ

1

У вас ПОЛНОЕ ПРИСОЕДИНЕНИЕ. Измените его на INNER JOIN.

Проверить эту ссылку для лучшего понимания SQL JOINS

Если подразумевалась ваши результаты будут в следующем:

Budget   Actual_Income 
6367005.00  665712.37 

Затем вы можете сделать подзапрос или агрегат:

подвыборка:

Select (Select sum(subscriptions.Bill_Amount) as Budget 
From imis.dbo.Name Name INNER JOIN imis.dbo.Subscriptions Subscriptions ON  Name.ID=Subscriptions.ID 
Where Member_Type = 'MM' and Name.Status = 'a' and Product_Code = 'Annual' and Subscriptions.Status = 'a') Budget, 
(SELECT sum(Amount * -1) as Actual_Income 
FROM imis.dbo.Name Name INNER JOIN imis.dbo.Trans Trans ON Name.ID=Trans.BT_ID 
WHERE PRODUCT_CODE ='ANNUAL' and Transaction_Date >= '21/10/2013' and Batch_Num <> 'DD131031-3') as Actual_Income 

всего:

Select MAX(a.Budget), MAX(b.Actual_Income) FROM 

(Select sum(subscriptions.Bill_Amount) as Budget 
From imis.dbo.Name Name INNER JOIN imis.dbo.Subscriptions Subscriptions ON  Name.ID=Subscriptions.ID 
Where Member_Type = 'MM' and Name.Status = 'a' and Product_Code = 'Annual' and Subscriptions.Status = 'a') AS a 

FULL JOIN 

(SELECT sum(Amount * -1) as Actual_Income 
FROM imis.dbo.Name Name INNER JOIN imis.dbo.Trans Trans ON Name.ID=Trans.BT_ID 
WHERE PRODUCT_CODE ='ANNUAL' and Transaction_Date >= '21/10/2013' and Batch_Num <> 'DD131031-3') AS b 
+0

Когда я делаю внутреннее соединение, он ничего не возвращает, даже NULL –

+0

Что вы ожидаете? Только одна строка с обоими результатами? –

+0

, если честно, да. Я только что начал изучать SQL, приложения. –