Профиль пользователя заблокирован сроком с 19 января 2022 г. и навсегда по причине: Нарушение п. 6.4, 6.5, 6.6 правил сервиса.
  • Как выполнить нижеперечисленное в одном SQL-запросе?

    @Amateru Автор вопроса
    Akina, Составил запросы, но вот как объединить все это с 5 и 6 пунктом - ума не приложу. Копаю в сторону отдельной функции для решения этого вопроса, но если вы можете направить в сторону более оптимального решения, то я был бы благодарен.
    create function FullMonthsSeparation 
    (
        @DateA datetime,
        @DateB datetime
    )
    returns int
    as
    begin
        declare @Result int
        declare @DateX datetime
        declare @DateY datetime
    
        if(@DateA < @DateB)
        begin
            set @DateX = @DateA
            set @DateY = @DateB
        end
        else
        begin
            set @DateX = @DateB
            set @DateY = @DateA
        end
    
        set @Result = (
    		select 
    			case 
    				when datepart(day, @DateX) > datepart(day, @DateY)
    				then datediff(month, @DateX, @DateY) - 1
    				else datediff(month, @DateX, @DateY)
    			end)
        return @Result
    end
    go
    
    select
    Production.ProductCategory.Name as 'Категория', 
    Production.ProductSubcategory.Name 'Подкатегория', 
    Production.Product.ProductID as 'ID продукта',	
    concat(
    	case 
    		when len(replace(Production.Product.Name, ' ', '%20%')) > 30 
    		then left(replace(Production.Product.Name, ' ', '%20%'), 30) + '...'
    		else replace(Production.Product.Name, ' ', '%20%')
    	end, ';', 
    	Production.Product.ProductNumber, ';', 
    	isnull(Production.Product.Color, 'NULL'), ';',
    	isnull(Production.Product.Size, 'NULL'))
    as 'Продукт',
    isnull(
    	dbo.FullMonthsSeparation(Production.Product.SellEndDate, Production.Product.SellStartDate), 
    	datediff(month, Production.Product.SellStartDate, getdate())) 
    as 'Время с начала продаж (месяцы)'
    from Production.ProductCategory, Production.ProductSubcategory, Production.Product 
    where Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID;
    
    
    select Production.ProductSubcategory.Name as 'Название подкатегории',avg(Production.Product.StandardCost) as 'Средняя цена в подкатегории' 
    from Production.Product, Production.ProductSubcategory 
    where Product.ProductSubcategoryID = ProductSubcategory.ProductSubcategoryID 
    group by Production.ProductSubcategory.Name;
    
    select Production.ProductCategory.Name as 'Название категории', avg(Production.Product.StandardCost) as 'Средняя цена в категории' 
    from Production.Product, Production.ProductSubcategory, Production.ProductCategory 
    where Production.ProductSubcategory.ProductCategoryID = Production.ProductCategory.ProductCategoryID 
    group by Production.ProductCategory.Name;