2017-02-17 3 views
0

Я хочу создать представление, в котором я хотел бы получить список предметов, которые не проданы за последние 6 месяцев. Я пробовал несколько подходов, но никто не работает правильно. Прошу вас, пожалуйста. У меня есть одна таблица для торгового массива данных, у которой нет элемента, и я получаю элемент no из другой таблицы, которая является таблицей элементов для списка всех элементов. вот 2 подхода: Я не могу создавать временные таблицы, так как это представление?sql просмотреть товары, не проданные за последние 6 месяцев

select distinct a.ItemID, a.TranDate Into #Itemslast6months 
from SalesDataMart a 
where TranDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0) 

Select distinct m.ITMNO_0 into #ItemsNotSoldLast6Months 
from ITEMMASTER as m 
Where not exists (select ItemID 
        from #Itemslast6months as B 
        where m.ITMNO_0 = B.ItemID) 


Select n.ITMNO_0, s.[Description], max(s.TranDate) last_Transaction_Date 
from #temsNotSoldLast6Months n 
join SalesDataMart s on n.ITMNO_0 = s.ItemID 
group by n.ITMNO_0, s.[Description] 

второй подход:


WITH ItemsSoldLast6Months (ItemID, TranDate) 
     AS 
     (
     select distinct a.ItemID, a.TranDate 
     from SalesDataMart a 
     where TranDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0) 

    ) 

    WITH ItemsNotSoldLast6Months (ItemNO) 
     AS 
     (
     Select distinct m.ITMNO_0 
from ITEMMASTER as m 
Where not exists (select ItemID 
        from ItemsSoldLast6Months as B 
        where m.ITMNO_0 = B.ItemID) 

    ) 


Select n.ITMNO_0, s.[Description], max(s.TranDate) last_Transaction_Date 
from #temsNotSoldLast6Months n 
join SalesDataMart s on n.ITMNO_0 = s.ItemID 
group by n.ITMNO_0, s.[Description] 
+0

Спасибо, так как мне это нужно для отчета, который будет работать ежемесячно, если я создаю настоящий table, тогда мне нужно добавить инструкцию drop table перед запуском инструкции? – user3347312

ответ

0

Это кажется быть то, что вы ищете, но это трудно сказать, без образца набора данных или DDL из таблиц.

Select distinct 
    m.ITMNO_0, 
    s.[Description], 
    max(s.TranDate) last_Transaction_Date 
from ITEMMASTER as m 
join SalesDataMart s on m.ITMNO_0 = s.ItemID 
Where not exists ( select distinct a.ItemID 
        from SalesDataMart a 
        where a.TranDate >= Dateadd(Month, Datediff(Month, 0, DATEADD(m, -6, current_timestamp)), 0)) 
group by m.ITMNO_0, s.[Description] 
0

Предполагая, что ваша таблица элементов ItemMaster и ваши транзакции продаж находятся в SalesDataMart, ваш запрос будет выглядеть так.

SELECT * 
FROM ITEMMASTER AS m 
WHERE NOT EXISTS (SELECT ItemID 
        FROM SalesDataMart AS S 
        WHERE m.ITMNO_0 = S.ItemID 
          AND TranDate > DATEADD(MONTH, -6, GETDATE()) 
        ); 

Если товар был продан в течение последних 6 месяцев, он будет отфильтрован запрос на ItemMaster

Смежные вопросы