Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2019, 16:12   #21
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сортировка не при чем, выводи первым столбцом декабрь
а, ну да, точно, это же в одну строку идёт:
Код:
SELECT SUM(CASE WHEN Month(D_Date) =12 THEN N_Amount ELSE 0 END) AS Mon12,
SELECT SUM(CASE WHEN Month(D_Date) =1 THEN N_Amount ELSE 0 END) AS Mon1,
SELECT SUM(CASE WHEN Month(D_Date) =2 THEN N_Amount ELSE 0 END) AS Mon2,
....

Цитата:
Сообщение от mavrikVIII Посмотреть сообщение
А вдруг будет запрос, по которому надо вывести данные по месяцам за несколько лет?
так если за несколько лет, то нужно добавлять в условие ещё и год.
иначе Mon1 - это будут данные за январь какого года?
Если Вам не нужно получить сумму данных за все январи всех выбранных лет

Последний раз редактировалось Serge_Bliznykov; 13.03.2019 в 16:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 16:17   #22
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сортировка не при чем, выводи первым столбцом декабрь или какой нужен, запрос если что и динамически можно сформировать
Или это очень сложно реализовать?
Подскажите пожалуйста ресурс/сборник задач, чтоб можно было попрактиковаться в запросах.
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 16:18   #23
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а, ну да, точно, это же в одну строку идёт:
Код:
SELECT SUM(CASE WHEN Month(D_Date) =12 THEN N_Amount ELSE 0 END) AS Mon12,
SELECT SUM(CASE WHEN Month(D_Date) =1 THEN N_Amount ELSE 0 END) AS Mon1,
SELECT SUM(CASE WHEN Month(D_Date) =2 THEN N_Amount ELSE 0 END) AS Mon2,
....


так если за несколько лет, то нужно добавлять в условие ещё и год.
иначе Mon1 - это будут данные за январь какого года?
Если Вам не нужно получить сумму данных за все январи всех выбранных лет

Мне кажется, что я наркоман: я сделал так: =)
sum(case when format(D_date,'yyyyMM')= 201812 then N_aMount else 0 end) as '201812' ,
sum(case when format(D_date,'yyyyMM')= 201901 then N_aMount else 0 end) as '201901',
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 16:20   #24
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Их надо будет вводить вручную так же?
Вручную с какого месяца-года по какой, интервал. А программа на основании этого формирует условие запроса. Хоть по годам, хоть по кварталам или месяцам. Тебе видней. И затем обращение к базе.
Код:
format(D_date,'yyyyMM')= 201812
коль так, то лучше
Код:
format(D_date,'yyyyMM')='201812'
все же чуть быстрей без преобразований строка-число
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.03.2019 в 16:24.
Аватар вне форума Ответить с цитированием
Старый 13.03.2019, 16:24   #25
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от mavrikVIII Посмотреть сообщение
Мне кажется, что я наркоман: я сделал так: =)
ну и нормально. не вижу ничего "наркоманского"
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 16:25   #26
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
коль так, то лучше
Код:
format(D_date,'yyyyMM')='201812'
да, в вот это верно подмечено!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.03.2019, 16:34   #27
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Всем спасибо большое за помощь)
mavrikVIII вне форума Ответить с цитированием
Старый 13.03.2019, 17:51   #28
mavrikVIII
Пользователь
 
Регистрация: 13.03.2019
Сообщений: 16
По умолчанию

Извините за беспокойство) Можете еще подсказать?
Задание такого: Требуется вывести дату номер и сумму начислений, для которых сумма превышает сумму предыдущего по дате начисления

Вообщем я сделал так:
use DBTestPractice;
select D_Date,
C_Number,
N_Amount,
lag (n_amount) OVER (order by d_date) as n_amount_b
from FD_Bills
--where FD_Bills.N_Amount > (select lag (n_amount) OVER (order by d_date) from fd_Bills)
order by D_Date


Хочу написать select который будет сравнивать n_amount и n_amount_b и если n_amount будет больше, то вывести эту строку.
Или я безнадежен?)

Последний раз редактировалось mavrikVIII; 14.03.2019 в 10:17.
mavrikVIII вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите начинающему Родион23 C# (си шарп) 6 23.05.2016 23:43
Помогите начинающему qeesl Общие вопросы по Java, Java SE, Kotlin 5 31.10.2015 19:01
Помогите начинающему. Небесный Общие вопросы Delphi 12 04.02.2007 08:56