Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

Откуда:
Сообщений: 21
Здравствуйте, форумчане! Интересная задачка по написанию SQL Query. Искал решение в книгах и на форумах - не нашел.

Имеется таблица "Transactions" в базе данных. У таблицы следующие столбцы:

1. id (int)
2. Date (Date)
3. Issuer (Text)
4. AccDT (Varchar(20))
5. DT (Money)
6.AccCR (Varchar(20))
7. CR (Money)


Мне нужно, чтобы запрос выдал мне число, которое равно: (Сумма всех значений "DT", при которых значение "AccDT" = "Bank") - (Сумма всех значений "CR, при которых значение "AccCR"="Bank")


Ломал голову над синтаксисом запроса - ничего не выходит. Заранее благодарю всех за отклик.
30 апр 12, 19:04    [12490978]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
select sum( case when AccDT = 'Bank' then DT else 0 end ) - sum( case when AccCR = 'Bank' then CR else 0 end ) from Transactions
30 апр 12, 19:28    [12491014]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

Откуда:
Сообщений: 21
Сергей Алексеевич, премного Вам благодарен за помощь!!!
30 апр 12, 19:39    [12491030]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

Откуда:
Сообщений: 21
А если к выражению нужно прибавить значение ячейки POST when Name = 'First' from Table1 ??
30 апр 12, 21:05    [12491136]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
iljy
Member

Откуда:
Сообщений: 8711
Viadrin
А если к выражению нужно прибавить значение ячейки POST when Name = 'First' from Table1 ??

Аналогично.
30 апр 12, 22:51    [12491340]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

Откуда:
Сообщений: 21
iljy, я имел ввиду чтобы все сделать в одном запросе, тоесть к вышеуказанному еще прибавить элемент поиска в другой таблице. Не получается правильно прописать синтаксис. Хелп)
30 апр 12, 23:11    [12491388]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
iljy
Member

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

как пробовали и что именно не получается? А синтаксис легко проверить, если открыть тот самый хелп.
30 апр 12, 23:13    [12491393]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

Откуда:
Сообщений: 21
iljy, третий запрос выдает значение 8000 (верное!), второй запрос выдает значение 1100 (верное), а 1 запрос (сумма 2 и 3) выдает значение 37200 (явно не верное, так как 8000+1100 = 9100). Вопрос: где ошибка в 1 запросе?






1.
select sum( case when AccountDT = 'Bank' then DT else 0 end ) - sum( case when AccountCR = 'Bank' then CR else 0 end )+ SUM(case when [Account Name]='Bank' then Anfangsbestand else 0 end) From Kontenrahmen, Transactions


2
select sum( case when AccountDT = 'Bank' then DT else 0 end ) - sum( case when AccountCR = 'Bank' then CR else 0 end ) From Transactions

3
Select SUM(case when [Account Name]='Bank' then Anfangsbestand else 0 end) as 'Anfbest' From Kontenrahmen
1 май 12, 22:03    [12493402]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
iljy
Member

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

Kontenrahmen, Transactions - это декартово произведение таблиц.
2 май 12, 00:06    [12493675]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

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

подскажите пожалуйста, как прописать так, чтобы было правильно. Первые 2 суммы берутся from Transactions, а последняя SUM from Kontenrahmen
2 май 12, 00:11    [12493683]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
iljy
Member

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

select (select sum( case when AccountDT = 'Bank' then DT else 0 end ) - sum( case when AccountCR = 'Bank' then CR else 0 end ) 
From Transactions) +
   (Select SUM(case when [Account Name]='Bank' then Anfangsbestand else 0 end) as 'Anfbest' From Kontenrahmen)
2 май 12, 00:22    [12493697]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

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

спасибо Вам большое! выручили меня, я уже второй день пытаюсь прописать этот запрос.

Возможно Вы подскажете, является ли написание таких длинных запросов эффективным? я имею ввиду, что, возможно, нагрузка на систему при обработке таких длинных запросов тормозит ее и их (эти длинные запросы) лучше избегать?
2 май 12, 00:32    [12493714]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
iljy
Member

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

допустимая нагрузка на систему определяется только требованиями по отклику. Если она успевает запросы обрабатывать и никого этим не напрягает - значит все нормально.
2 май 12, 01:06    [12493752]     Ответить | Цитировать Сообщить модератору
 Re: Составление Query. Возможно ли в принципе решить проблему?  [new]
Viadrin
Member

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

Благодарю за помощь!
2 май 12, 01:09    [12493758]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить