Jag försöker att ta reda på var olika produkter finns i ett lager.
Det finns flera produkter av samma sort som är lagrade på olika ställen.
Nu försöker jag sålla ut vilka produkter som det finns fler än en av och sen
vill jag hitta var dessa finns (För att sedan kunna sortera dem).
Om jag kör en "SELECT fldProductName FROM tblProducts GROUP BY fldProductName HAVING Count(fldProductName) > 1"
får jag reda på vilka det finns fler än en av. Men hur ska jag sen göra för att visa de
(sorterade på produktnamn) som finns utspridda (Dvs där fldLocation1, fldLocation2 är olika)?
Tjena du får köra med joins du får joina olika tabeller typ
SELECT product.tabel1, product.table2 FROM tabel1 INNER JOIN tabel2 ON product.table1 = product.table2 group BY product HAVING count(product.table1, product.table2 ) > 1
typ något sådant får du köra, kolla i trådarna efter joins etc.
okej jag är tydligen lite oklar med vad jag menar.
Jag har en massa produkter som ligger i lådor som är utspridda på flera ställen
(inte utspridda där av mig.. men sådant är läget så det är bara att göra det bästa av situationen).
Lådorna är numrerade och representerar fldLocation2 och platserna där lådorna ligger är fldLocation1.
Vad jag vill göra är att samla ihop produkter av samma sort på samma ställe så att det blir lätt att
plocka ut dem och att det blir lättare att få en bra översikt.
Jag försöker nu göra en sql-fråga som sorterar ut de produkter som är utspridda och presenterar det så
att någon kan gå ut och rent fysiskt sortera produkterna. Det finns även några extra fält som jag skulle
vilja fanns med på presentationen som innehåller extra information till den som ska sortera.
Om man stolpar upp vad jag vill göra så är det följande:
Hitta de produkter som är fler än 1
Visa var dessa produkter finns och hur många de är på samma position samt lite extra information.
Jo LarsG min datamodell kan tyckas lite suspekt då jag har både produktID och produktNamn i samma tabell.
Men då det inte är särskilt vanligt med att det finns mer än 1-3 produkter med samma namn tyckte jag det var
onödigt att normalisera detta. Dessutom läggs det till och tas bort produkter hela tiden.
Om du gör så här får du träff på alla produktnamn som inte ligger på samma location1... Är det det du vill, tro? :q
select fldproductname, fldproductlocation1, fldproductlocation2
from tblproducts p
where exists
(select * from tblproducts
where p.fldproductname = fldproductname
and p.fldproductlocation1 <> fldproductlocation1)
Tack agneta_rung det var nästan det jag ville ha.
Din SQL-fråga gav mig alla produkter som var utspridda på flera ställen. Fick läsa på lite vad EXISTS gör (har inte använt det förut)
och passade även på att kolla upp vad IN gör.
Problemet är att det även gav mig dubletter på produkter som låg på samma ställe om det även fanns någon som låg på ett annat ställe.
T ex om man har sammma produkt på tre olika ställen: position3, position5 och position3 så fick man samtliga. Det är ju rätt logiskt.
Vad jag då gjorde var att lägga till DISTINCT i min query
SELECT DISTINCT P.fldProductName, P.fldLocation4, P.fldBatch FROM tblProducts AS P
WHERE EXISTS
(SELECT fldProductName FROM tblProducts AS P2 WHERE P.fldProductName = P2.fldProductName AND P.fldLocation4 <> P2.fldLocation4)
ORDER BY P.fldProductName ASC
Men nu har jag ett annat problem. Jag vill ju även visa lite mer information om produkterna.
Men om jag kör DISTINCT på fler fält får jag även med produkter som ligger på samma ställe.
Tja, du kan ju alltid lägga till en nivå till... Men då håller jag verkligen med LarsG om att det börjar lukta märklig datamodellering! Vart hör den "extra informationen" - i själva verkligheten alltså? Hör den till produkten eller till lagerplatsen? Om den hör till produkten borde det inte vara något problem med din distinct, men hör den till lagerplatsen eller kanske till kombinationen produkt/lagerplats så borde du nog fundera på att modellera om databasen...
Denna fråga ger träff på samma produkt på samma lagerplats om "den extra informationen" skiljer sig.
select fldproductname, fldLocation4, fldBatch
from tblproducts as p2
where exists
(select * from tblproducts as p
where p2.fldproductname = fldproductname
and fldLocation4 = p2.fldLocation4
and exists
(select * from tblproducts
where p.fldproductname = fldproductname
and p.fldLocation4 <> fldLocation4))
order by fldproductname, fldLocation4
Garanterar inte att detta funkar. Har inte testat fullt ut!! :P
134 ms totalt · 3 externa anrop · v20260731065814-full.8a4e7caf