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

Откуда:
Сообщений: 1
Задание: Вывести для каждого поставщика сколько им было поставлено продуктов: в год и в каждом квартале.

Картинка с другого сайта.

select nazvanie, kol from postavshiki
join postavki on postavki.pc=postavshiki.pc
where DATEPART(year,data)=2015



Этим запросом я получаю сколько они доставили за год(за все 4 квартала), и столбик kol уже выведен и занят.


Как мне опять обратится к этому столбику что бы уже ввести условия ТОЛЬКО на 1 квартал, так что бы это была одна таблиц (ЗА ГОД, ЗА 1 КВАРТАЛ, ЗА 2 КВАРТАЛ, ЗА 3 КВАРТАЛ, ЗА 4 КВАРТАЛ.)

К сообщению приложен файл. Размер - 4Kb
29 сен 19, 14:18    [21981995]     Ответить | Цитировать Сообщить модератору
 Re: Как обратится повторно к тому же столбцу и работать с ним не трогая первый запрос  [new]
Щукина Анна
Member

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

Почитайте про CASE
29 сен 19, 18:32    [21982066]     Ответить | Цитировать Сообщить модератору
 Re: Как обратится повторно к тому же столбцу и работать с ним не трогая первый запрос  [new]
vikkiv
Member

Откуда: London
Сообщений: 2626
MOaY,

group by
29 сен 19, 20:07    [21982090]     Ответить | Цитировать Сообщить модератору
 Re: Как обратится повторно к тому же столбцу и работать с ним не трогая первый запрос  [new]
istrebitel
Member

Откуда:
Сообщений: 49
  • 1. Не используйте функцию от поля даты для выборки диапазона, SQL сервер будет просматривать всю таблицу и применять datepart к каждой строке и после этого проверять равен ли результат 2015. Если у вас будет индекс по этому полю, то он не поможет.
  • 2. Создаёте функцию округляющую дату до квартала

    CREATE FUNCTION [dbo].[StartOfTheQuarter]
    (
    	@Date datetime
    )
    RETURNS datetime
    AS
    BEGIN
    	DECLARE @d datetime = convert(datetime, convert(char(8), @Date, 112), 112);
    	RETURN DATEADD(QUARTER, DATEDIFF(QUARTER, 0, @d), 0); 
    END
    


    После чего запросом получите данные в разрезе кварталов с суммой по году
    select 
    	provs.nazvanie
    	, dbo.StartOfTheQuarter(delivs.data)
    	, sum(delivs.kol)
    from 
    	postavshiki provs
    	join postavki delivs on delivs.pc = provs.pc
    where 
    	delivs.data >= convert(datetime, '01.01.2015', 104)
    	and delivs.data < convert(datetime, '01.01.2016', 104)
    group by 
    	provs.nazvanie
    	, cube(dbo.StartOfTheQuarter(delivs.data))
    
  • 30 сен 19, 11:49    [21982501]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить