Mam całkiem prosty SQL:

SELECT TRIM(Branch.Area)                             "Area", 
       Branch.Article                                "Article"
FROM   DBA.Branch Branch 
       LEFT JOIN DBA.Attribute Attribute 
              ON Branch.Article = Attribute.Article
       LEFT JOIN DBA.Attribute2 Attribute2 
              ON Branch.Article = Attribute2.Article
       LEFT JOIN DBA.ItemMaster ItemMaster 
              ON Branch.Article = ItemMaster.Article

WHERE  Branch.Type = 'M' 
       AND Branch.Area LIKE '%US%' 

Jak widać, ten zapytanie zapewnia tabelę z przecięcia na podstawie 4 tabel. Wybrane kolumny są znacznie więcej niż 2. Ale nie są tutaj konieczne.

Teraz chciałbym informacje o kosztach na artykuł z 5 stół. Ta tabela ma tę strukturę:

  • Artykuł
  • Departament
  • Rodzaj
  • Koszt

Dla każdego kodu istnieje różnice koszty na departę. Oznacza to, że każdy artykuł jest wyświetlany kilka razy. Raz na dział. Teraz szukam maksymalnego kosztu dla każdego artykułu. Ta wartość, którą chciałbym dodać do zapytania powyżej. Ale jak?

Istnieją również dwa filtry do tabeli kosztów:

  • Koszt .type = 'm'
  • Cost.area jak "% US%"
0
joshua 21 październik 2020, 18:33

1 odpowiedź

Najlepsza odpowiedź

Rozwiązanie jest rozwiązanie

SELECT TRIM(Branch.Area)                             "Area", 
       Branch.Article                                "Article",
       C.maxcost
FROM   DBA.Branch Branch 
       LEFT JOIN DBA.Attribute Attribute 
              ON Branch.Article = Attribute.Article
       LEFT JOIN DBA.Attribute2 Attribute2 
              ON Branch.Article = Attribute2.Article
       LEFT JOIN DBA.ItemMaster ItemMaster 
              ON Branch.Article = ItemMaster.Article
       LEFT JOIN (SELECT Article, MAX(Cost) AS maxcost FROM DBA.ItemMaster.Cost GROUP BY Article) C 
              ON C.Article=Branch.Article

WHERE  Branch.Type = 'M' 
       AND Branch.Area LIKE '%US%' 

Naprawdę tego nie mam

Istnieją również dwa filtry do tabeli kosztów:

Cost.Type = 'M'
Cost.Area LIKE '%US%'

Wygląda jak dokładnie te same filtry, co na stole oddziału. Jeśli masz ten sam artykuł Informacje przechowywane na 2 tabelach, to nie jest konieczne do filtrowania rekordów kosztów. Jeśli nie, możesz to zrobić w dodatkowym skojarze:

       LEFT JOIN (SELECT Article, MAX(Cost) AS maxcost FROM DBA.ItemMaster.Cost WHERE Type='M' AND Area LIKE '%US%' GROUP BY Article) C 
              ON C.Article=Branch.Article
1
Thomas G 21 październik 2020, 17:13