2014-01-22 4 views
-1

Проблема заключается в том, что я пытаюсь получить значения суммы из двух разных таблиц, но использование условия из результата таблицы 3 искажается результатом неправильной суммы. Так что я попытался Select sum() as t1 (select sum()...), как t2 и я хочу подвести t1 и t2, таким образом t1 и t2 результат правильно так есть кодЗначения суммы SQL SERVER SELECT

SELECT 
    SUM(daa.[price]) AS t1, 
    (
     SELECT SUM(dap.[price]) AS suma 
     FROM fydtr.dbo.[sales] AS dap, 
      [fydtr].[dbo].[work info] AS di 
     WHERE YEAR(di.[end of work datetime]) = 2013 
      AND MONTH(di.[end of work datetime]) = 12 
      AND di.[state] = 'e' 
      AND di.[reg. nr.] = dap.[reg. nr.] 
) AS t2 
FROM [fydtr].[dbo].[work sale] AS daa, 
    fydtr.dbo.[work info] AS dbi 
WHERE YEAR(dbi.[end of work datetime]) = 2013 
    AND MONTH(dbi.[end of work datetime]) = 12 
    AND dbi.[state] = 'e' 
    AND dbi.[reg. nr.] = daa.[reg. nr.] 

Это дает результата

t1 340
t2 509

И мне нужно собрать их и получить 849 как t3.

+7

[почему] [есть] [вы] [использованные] [квадратные] [скобки] [везде], [когда] [вы] [не] [[ нужно]? – Bohemian

+0

[потому что] [когда] [вы] [сохранить] [the] [таблицы] [путь] [вы] [может] [сохранить] [скрипт] [файл] [и] [открыть] [для] [редактирование] [ без] [errors] [что таблицы не могут быть найдены] – miskovelnias

+1

И что? Удобство чтения. Сначала добавьте что-то в скрипт, который сначала изменится на нужную базу данных, если это проблема. Не загрязняйте код ненужными символами, и если он не выгружен, не исправляйте его. И, кстати, я бы уволил всех, кто помещал пробел в имя столбца/таблицы. – Bohemian

ответ

1

Что-то вроде этого.

select t1, t2, t1 + t2 t3 
from (
the query from your question 
) temp 
0

Непонятно, из-за отсутствия входных данных. Но я предполагаю, что вы ищете что-то вроде этого:

select sum(sale.pice) as t1 
    , sum(sales.price) as t2 
    , sum(sales.price) + sum(sale.price) as t3 
    from [work info] as info 
     left outer join [work sale] as sale on (info.state = 'e' and info.[reg. nr.] = sale.[reg. nr.]) 
     left outer join [work sales] as sales on (info.state = 'e' and info.[reg. nr.] = sales.[reg. nr.]) 
    where year(info.[end of work datetime]) = 2013 
     and month(info.[end of work datetime]) = 12 

Это зависит от отношений между вашими таблицами, например. в моем примере, я предполагаю, что есть только одна запись в [reg. nr.] во всех таблицах. В противном случае вы можете использовать «функции окна», или UNIONS или CTE (http://msdn.microsoft.com/en-us/library/ms175972.aspx). Возможно, вам понадобится предоставить больше контекста, чтобы получить ответ, который вы ищете.

Мой данный запрос, вероятно, немного чище вашего запроса. Если это не проблема, или если мое предположение неверно, ответ Дэна Бракука поможет вам.

И вам, вероятно, следует также взглянуть на имена столбцов. На мой взгляд, они немного сложны :)

Смежные вопросы