2013-04-18 8 views
0

У меня есть два запроса:Добавление двух запросов SQL

SELECT SUM(DATALENGTH(Money))/1048576.0 from Money 

SELECT SUM(DATALENGTH(Cc))/1048576.0 from CC 

Если побежал по отдельности они возвращаются 20 и 30. Я хочу, чтобы объединить их, чтобы получить результат, как 50.

Можно ли это сделать в одной строке? Вместо того, чтобы назначить два значения переменных запроса 1 и 2 и добавить их?

ответ

1
select sum(sm) as total_sum 
from (
    SELECT SUM(DATALENGTH(Money))/1048576.0 as sm 
    from Money 

    union all 

    SELECT SUM(DATALENGTH(Cc))/1048576.0 
    from CC 
) t 
+0

Возможно, вы захотите добавить псевдоним 'sm'. –

+0

@GordonLinoff: да, я заметил это сразу после публикации. –

+0

@GordonLinoff - Не могли бы вы объяснить, что означает 't' в конце скрипта? Если я бегу без него, я получаю ошибку. Зачем мне это нужно? – NoviceMe

0

Я считаю, что это будет работать:

Select 
    (SELECT SUM(DATALENGTH(Money))/1048576.0 from Money) 
+ (SELECT SUM(DATALENGTH(Cc))/1048576.0 from CC) 

По крайней мере, это делает в моем DB двигателя.

1

Стандартный способ сделать это с помощью cross join:

select val1 + val2 
from (SELECT SUM(DATALENGTH(Money))/1048576.0 as val1 from Money 
    ) t1 cross join 
    (SELECT SUM(DATALENGTH(Cc))/1048576.0 as val2 from CC 
    ) t2 
+0

Спасибо! Как я могу присвоить val1 + val2 переменной int в вышеприведенном скрипте? – NoviceMe

+0

Если вы хотите присвоить ему имя столбца, вы должны использовать 'select (val1 + val2) в качестве TheSum. , , '. Если вы хотите назначить его переменной, это зависит от языка сценариев, но обычно это что-то вроде 'select @TheSum = (val1 + val2). , .'. –

0
SELECT SUM(S) 
FROM (
    SELECT SUM(DATALENGTH(Money))/1048576.0 S from Money 
    UNION ALL 
    SELECT SUM(DATALENGTH(Cc))/1048576.0 from CC 
) Q; 
1

Это должно сделать трюк:

SELECT 
(SUM(DATALENGTH(Money))/1048576.0) + SUM(DATALENGTH(Cc))/1048576.0 
from Money, CC