Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Хееелп, пожалуйста!!!!!  [new]
yaBlondinkO
Guest
Доброго дня!!!!
Помогите пжлста с запросом!!!!
Есть таблица Ballans
type date summa
0 01.09.2009 5000
0 02.09.2009 7000
1 02.09.2009 2000
1 03.09.2009 3000


и запрос

select
S1.Sum1-S2.Sum2
from
(select sum(summa) as Sum1 from Ballans where type=0 group by type)  as S1 cross join
(select sum(summa) as Sum2 from Ballans where type=1 group by type) as S2)

И все супер просто, только вот если таблица выглядит например так:

type date summa
0 01.09.2009 5000
0 02.09.2009 7000


то результата не дает...а надо чтобы выводиось 12000....как сделать, подскажите!!!!

пробовала так, но чет не помогает ((((

select
case when (select count(*) from Ballans where type=0)=0 then S2.Sum2
       when (select count(*) from Ballans where  type=1)=0 then  S1.Sum1
         else  S1.Sum1-S2.Sum2  end as Summa
from
(select sum(summa) as Sum1 from Ballans where type=0 group by type)  as S1 cross join
(select sum(summa) as Sum2 from Ballans where type=1 group by type) as S2)
4 сен 09, 10:35    [7616628]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
???
select
isnull(S1.Sum1, 0) - isnull(S2.Sum2, 0)
from
(select sum(summa) as Sum1 from Ballans where type=0 group by type)  as S1 cross join
(select sum(summa) as Sum2 from Ballans where type=1 group by type) as S2)
4 сен 09, 10:40    [7616661]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
yaBlondinkO
запрос
select
S1.Sum1-S2.Sum2
yaBlondinkO
таблица выглядит например так:
type date summa
0 01.09.2009 5000
0 02.09.2009 7000
yaBlondinkO
надо чтобы выводиось 12000
не понял, что из чего надо вычесть чтобы получилось 12000 ?
4 сен 09, 10:41    [7616665]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select sum ( case type when 0 then summa else - summa end) from ballans
-------------------------------------
Jedem Das Seine
4 сен 09, 10:41    [7616666]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
tpg
???
select
isnull(S1.Sum1, 0) - isnull(S2.Sum2, 0)
from
(select sum(summa) as Sum1 from Ballans where type=0 group by type)  as S1 cross join
(select sum(summa) as Sum2 from Ballans where type=1 group by type) as S2)


DECLARE @Ballans table([type] int,[date] datetime, [summa] int)

INSERT INTO @Ballans ([type],[date], [summa])
SELECT 0,	'20090901',	5000 UNION ALL
SELECT 0,	'20090902',	7000 UNION ALL
SELECT 1,	'20090902',	2000 UNION ALL
SELECT 1,	'20090903',	3000


SELECT ISNULL((select sum(summa) as Sum1 from @Ballans where type=0 group by [type]),0)
-ISNULL((select sum(summa) as Sum2 from @Ballans where type=1 group by [type]),0)
4 сен 09, 10:52    [7616742]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
М.б. автор потрудиться озвучить алгоритм?
4 сен 09, 10:54    [7616754]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
yaBlondinkO
Guest
Паганель
не понял, что из чего надо вычесть чтобы получилось 12000 ?


нужно сложить суммы где type=0 и вычесть из них сумму где type=1...а если нет записей где type=1 то просто "сложить суммы где type=0"
4 сен 09, 11:00    [7616788]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
yaBlondinkO
Паганель
не понял, что из чего надо вычесть чтобы получилось 12000 ?


нужно сложить суммы где type=0 и вычесть из них сумму где type=1...а если нет записей где type=1 то просто "сложить суммы где type=0"


...а если нет записей где type=0 что делать?

PS мой вариант вас не устроил?
4 сен 09, 11:01    [7616797]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
yaBlondinkO
Паганель
не понял, что из чего надо вычесть чтобы получилось 12000 ?


нужно сложить суммы где type=0 и вычесть из них сумму где type=1...а если нет записей где type=1 то просто "сложить суммы где type=0"


И что тут тогда делает CROSS JOIN. ВЫ смысл этого объединения понимаете?
4 сен 09, 11:05    [7616828]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
yaBlondinkO
Guest
DENIS_CHEL


DECLARE @Ballans table([type] int,[date] datetime, [summa] int)

INSERT INTO @Ballans ([type],[date], [summa])
SELECT 0,	'20090901',	5000 UNION ALL
SELECT 0,	'20090902',	7000 UNION ALL
SELECT 1,	'20090902',	2000 UNION ALL
SELECT 1,	'20090903',	3000


SELECT ISNULL((select sum(summa) as Sum1 from @Ballans where type=0 group by [type]),0)
-ISNULL((select sum(summa) as Sum2 from @Ballans where type=1 group by [type]),0)


Спасибо большое!!!!! Так просто, аж стыдно )))))
4 сен 09, 11:06    [7616831]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
yaBlondinkO,

а чем мой вариант не устроил ?
4 сен 09, 11:09    [7616855]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Maxx
yaBlondinkO,

а чем мой вариант не устроил ?


наверно просто не заметили ваш вариант (я свой для поправки идеи tpg писал)

PS yaBlondinkO незачто)))
4 сен 09, 11:15    [7616901]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
yaBlondinkO
Guest
DENIS_CHEL

наверно просто не заметили ваш вариант (я свой для поправки идеи tpg писал)

PS yaBlondinkO незачто)))


))) действительно не заметила!!!!!

Maxx, и Вам спасибо!!!!
4 сен 09, 11:18    [7616930]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Или я ничего не понимаю, или одно из двух...

SELECT
  SUM(CASE type
        WHEN 0 THEN summa
        WHEN 1 THEN - summa
      END)
FROM 
  @Ballans
4 сен 09, 11:20    [7616939]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
yaBlondinkO
))) действительно не заметила!!!!!


ГЫ... Я тоже....
4 сен 09, 11:20    [7616943]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Кроме всего прочего, если type в запросе равно конкретному значению, то зачем group by type?
4 сен 09, 12:08    [7617327]     Ответить | Цитировать Сообщить модератору
 Re: Хееелп, пожалуйста!!!!!  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap,
не надо оно там
4 сен 09, 12:50    [7617632]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить