Извлекайте данные из складского запаса, группируйте по статье, но, если описание меняется, используйте последний ИСПОЛЬЗОВАННЫЙ - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть один файл xls, и на 1-м листе у меня есть записи моего запаса товаров, я извлекаю этот файл каждый год и помещаю результат в последнюю строку в той же таблице. Я пытаюсь соответствовать последние 3 года, код статьи УНИКАЛЬНЫЙ, но описание было изменено. Есть один способ группировки по коду статьи, и если описание изменилось, использовать последний найденный? это файл

enter image description here

это мой запрос, я использую ADODB.Connection:

SELECT tab1[Codice Articolo], tab1Descrizione, Sum(IIf([anno]=2017,[qta],0)) AS Qta2017, Sum(IIf([anno]=2017,[Tot],0)) AS Val2017, Sum(IIf([anno]=2017,[€Pz],0)) AS Cad2017, Sum(IIf([anno]=2018,[Qta],0)) AS Qta2018, Sum(IIf([anno]=2018,[Tot],0)) AS Val2018, Sum(IIf([anno]=2018,[€pz],0)) AS Cad2018, Sum(IIf([anno]=2019,[Qta],0)) AS Qta2019, Sum(IIf([anno]=2019,[Tot],0)) AS Val2019, Sum(IIf([anno]=2019,[€pz],0)) AS Cad2019
FROM tab1
GROUP BY tab1.[Codice Articolo], tab1.Descrizione;

это результат qry

enter image description here

и это то, что я надеюсь иметь возможность иметь: enter image description here

Я думаю что мне нужно использовать одно соединение с одной и той же таблицей, я пробую какой-то вариант этого кода без права:

SELECT t1[Codice Articolo], t2.Descrizione,(IIf(t1.[anno]=2017,t1.[qta],0)) AS Qta2017, Sum(IIf(t1.[anno]=2017,t1.[Tot],0)) AS Val2017, Sum(IIf(t1.[anno]=2017,t1.[€Pz],0)) AS Cad2017, Sum(IIf(t1.[anno]=2018,t1.[Qta],0)) AS Qta2018, Sum(IIf(t1.[anno]=2018,t1.[Tot],0)) AS Val2018, Sum(IIf(t1.[anno]=2018,t1.[€pz],0)) AS Cad2018, Sum(IIf(t1.[anno]=2019,t1.[Qta],0)) AS Qta2019, Sum(IIf(t1.[anno]=2019,t1.[Tot],0)) AS Val2019, Sum(IIf(t1.[anno]=2019,t1.[€pz],0)) AS Cad2019
FROM tab1 t1
LEFT JOIN (Select t2.Descrizione from Tab1 t2 on t2.anno = max(t1.anno)
LEFT JOIN 
GROUP BY tab1[Codice Articolo], t2.Descrizione;

Верный путь, но ошибка в коде или неправильный подход? спасибо за любые предложения

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я был уверен, что решение моей проблемы было с JOIN QUERY, я не вижу свет, потому что мне нужно два JOIN.

это решение, которое я нашел:

strsql = "SELECT t1.[Codice Articolo], t2.Descrizione," & _
"Sum(IIf(t1.[Esercizio]=2017,t1.[NrPz],0)) AS Qta2017," & _
"Sum(IIf(t1.[Esercizio]=2017,t1.[€Tot],0)) AS Val2017," & _
"Sum(IIf(t1.[Esercizio]=2017,t1.[€Pz],0)) AS Cad2017," & _
"Sum(IIf(t1.[Esercizio]=2018,t1.[NrPz],0)) AS Qta2018," & _
"Sum(IIf(t1.[Esercizio]=2018,t1.[€Tot],0)) AS Val2018," & _
"Sum(IIf(t1.[Esercizio]=2018,t1.[€pz],0)) AS Cad2018," & _
"Sum(IIf(t1.[Esercizio]=2019,t1.[NrPz],0)) AS Qta2019," & _
"Sum(IIf(t1.[Esercizio]=2019,t1.[€Tot],0)) AS Val2019," & _
"Sum(IIf(t1.[Esercizio] = 2019, t1.[€pz], 0)) As Cad2019 " & _
"FROM ([temp$] t1 INNER JOIN [temp$] AS t2 ON t1.[Codice Articolo] = t2.[Codice Articolo]) INNER JOIN (SELECT Max([Esercizio]) AS maxdiEsercizio, [Codice Articolo] FROM [temp$] GROUP BY [Codice Articolo]) t3 ON (t2.[Codice Articolo] = t3.[Codice Articolo]) AND (t2.Esercizio = t3.maxdiEsercizio) " & _
"GROUP BY t1.[Codice Articolo], t2.Descrizione;"

Спасибо. Фабрицио

0 голосов
/ 13 апреля 2020

Проблема с описанием, значение которого иногда равно коду статьи, а иногда нет. Это создает новые группы, а это не то, что вам нужно.

Вот один из способов избежать этого:

SELECT 
    tab1[Codice Articolo], 
    Max(IIf(tab1[Codice Articolo] <> tab1Descrizione, tab1Descrizione, null)) AS tab1Descrizione
    Sum(IIf([anno]=2017,[qta],0)) AS Qta2017, 
    Sum(IIf([anno]=2017,[Tot],0)) AS Val2017, 
    ..., 
    Sum(IIf([anno]=2019,[€pz],0)) AS Cad2019
FROM tab1
GROUP BY tab1.[Codice Articolo], tab1.Descrizione;
...