Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003

Hjälp med SQL

Dessa SQL frågor..

Jag har en tabell som innehåller massor av artiklar. När den har saldo=1 i saldo-kolumnen finns den i lagret. När den är satt till 0 har den således levererats men det finns alltså en "logg" kvar.

Jag vill ta fram alla fack och hyllor som och antalet artiklar per fack-hylla.

SELECT fack, hylla, COUNT(saldo) AS antalet FROM Storeage WHERE (saldo = 1) GROUP BY fack,hylla ORDER BY fack,hylla

Har kommit så här långt, men som ni märket visas bara lagerplatser för alla fack och hyllor som innehåller artiklar, vilket jag vill ha.
Men jag vill också visa alla fack och hyllor som är tomma. (dvs ingen artikel har saldo=1)

Hur gör jag, har testat med having, men jag listar bara allt (inkl loggen) med det.

Har nån någon bra idé?

K#

Trädvy Permalänk
Medlem
Registrerad
Okt 2013

Kan du inte bara ta bort din WHERE, så får du allt?

annars kan man väll använda ett OR.
WHERE (saldo = 1) OR (saldo = 0)

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003

Problemet är att jag får ALLT som har saldo=0 uppräknat i count.
När en artikel finns har den saldo=1, när den inte finns är saldot=0. Jag har alltså tusentals artiklar som ligger som saldo=0, även i lagerplatser där det finns saldo=1 givetvis.
Jag vill inte visa vad som finnits historiskt, utan vad som finns nu..

Tar jag bort where eller sätter or saldo=0 får jag fram alla artiklar som nånsin funnits i lagret..

K#

Trädvy Permalänk
Medlem
Plats
på landet
Registrerad
Feb 2002

förstår inte riktigt vad du vill få ut.

"Men jag vill också visa alla fack och hyllor som är tomma. (dvs ingen artikel har saldo=1)"

"Jag har alltså tusentals artiklar som ligger som saldo=0, även i lagerplatser där det finns saldo=1 givetvis."

"Jag vill inte visa vad som finnits historiskt, utan vad som finns nu."

vad menar du med detta?

Vill du ha alla fack, hylla som inte har någon data alls? beroende på databas så kunde du söka på NULL

"Det här systemet fungerar urkasst." - operatör.
"Hur ska det fungera då?" - jag
"Gör så att det fungerar som jag vill." - operatör.
/facepalm

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003

Jo..

Enligt min SQL-fråga så får jag ut alla lagerplatser som innehåller artiklar. så långt är jag med. (530st) Men totalt har jag 800 lagerplatser. Jag har alltså 270 lagerplatser som inte visas i min SQL-fråga för att de inte har någon artikel med saldo=1, dvs ingen i lager.

Saldo kan alltså bara vara 0 eller 1. Har jag 2st i lager finns det 2st rader i tabellen som är satt till 1.
Saldo är alltså inte något saldo utan en flagga om den finns eller inte.

Vet inte hur jag ska få till att visa lagerplatser som har count(saldo)=0 så att säga..

K#

Trädvy Permalänk
Medlem
Plats
Oslo
Registrerad
Mar 2004

SELECT fack, hylla, saldo, COUNT(saldo) AS antalet
FROM Storeage
GROUP BY fack,hylla, saldo
ORDER BY fack,hylla, saldo

Testat det?

Speldator: Intel i5-7600K @4,95Ghz - BeQuiet PureRock - MSI Z170A SLI Plus - Corsair RM550x - Sapphire RX480 Nitro+ 4GB - Samsung 24" Quantum Dot FreeSync 144hz - 8Gb Corsair Vengeance 2400Mhz DDR4 - Samsung 850 Evo 250Gb - NZXT S340

Jobbdator: Dell XPS-15 2016 - 16Gb DDR4 - 512Gb PCI-e SSD - Intel i7-6700HQ - GeForce 960M

Konsol: Xbox One X - Samsung 55" Q7F 4K HDR

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2007

@atman: Om jag fattar dig rätt, du vill veta vilka artiklar du har i lager, och lista alla tillhörande lagerplatser även om det inte finns en artikel på just den platsen?

Du får jättegärna modellera din databas på http://sqlfiddle.com/ så kan du få bättre hjälp av oss.

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 32GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Samsung S8
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av atman:

Dessa SQL frågor..

Jag har en tabell som innehåller massor av artiklar. När den har saldo=1 i saldo-kolumnen finns den i lagret. När den är satt till 0 har den således levererats men det finns alltså en "logg" kvar.

Jag vill ta fram alla fack och hyllor som och antalet artiklar per fack-hylla.

SELECT fack, hylla, COUNT(saldo) AS antalet FROM Storeage WHERE (saldo = 1) GROUP BY fack,hylla ORDER BY fack,hylla

Har kommit så här långt, men som ni märket visas bara lagerplatser för alla fack och hyllor som innehåller artiklar, vilket jag vill ha.
Men jag vill också visa alla fack och hyllor som är tomma. (dvs ingen artikel har saldo=1)

Hur gör jag, har testat med having, men jag listar bara allt (inkl loggen) med det.

Har nån någon bra idé?

Om jag förstår dig rätt..

SELECT fack, hylla, SUM(saldo) AS antalet FROM Storeage GROUP BY fack,hylla ORDER BY fack,hylla

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003
Skrivet av zyberzero:

@atman: Om jag fattar dig rätt, du vill veta vilka artiklar du har i lager, och lista alla tillhörande lagerplatser även om det inte finns en artikel på just den platsen?

Du får jättegärna modellera din databas på http://sqlfiddle.com/ så kan du få bättre hjälp av oss.

Precis, har fått till det att det visar antalet samt vilka lagerplatser. Men jag hade varit hjälpt av att det listar lagerplatserna som är tomma också.

Kikar om jag får till det på siten.

K#

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jul 2007
Skrivet av atman:

Precis, har fått till det att det visar antalet samt vilka lagerplatser. Men jag hade varit hjälpt av att det listar lagerplatserna som är tomma också.

Kikar om jag får till det på siten.

Då blir det relativt enkelt, jag skulle löst det med en subquery. Först en query för att klura ut vilka prylar du har i lager - jag antar att alla prylar har ett artikelnummer:

SELECT artikelnummer FROM storage GROUP BY artikelummer HAVING SUM(saldo) > 0

Denna fråga ger alltså alla artikelnummer som finns i ditt lager. Låt oss säga att för att ta reda på vilka lagerplatser en viss artikel har, så skulle frågan kunna se ut så här:

SELECT artikelnr, hylla, fack, saldo FROM Storage WHERE artikelnr = 12345

Om vi då parar ihop dessa får vi följande:

SELECT artikelnr, hylla, fack, saldo FROM Storage WHERE artikelnr in (SELECT artikelnummer FROM storage GROUP BY artikelummer HAVING SUM(saldo) > 0)

Och då får du en tabell som troligen ser ut något så här:

+-----------+-------+------+-------+ | Artikelnr | Hylla | Fack | Saldo | +-----------+-------+------+-------+ | 12345 | A | 12 | 0 | | 12345 | A | 13 | 1 | | 99999 | B | 2 | 42 | +-----------+-------+------+-------+

Låter det rimligt?

WS: Bärbar workstation, 2 * Dell U2412M
HTPC: Intel NUC, Canton GLE 496, Yamaha RV-A830, Sanyo PLV-Z700
Server: Intel Xeon E3-1240@3.4 GHz, ESXi, 32GB RAM, 8*2TB RAID-Z2 + SSD-cache
Slösurf: MacBook Air 11,6", Samsung S8
Kamera: Canon EOS 5DII + 1DIII, Canon 100/2.8 Macro, Canon 70-200/2.8L, Canon 24-70/2.8L

Trädvy Permalänk
Medlem
Registrerad
Okt 2012

När man har problem att få en query som gör allt i ett svep är oftast UNION ALL trevligt. Den slår ihop svaret av två querys med samma kolumner till ett svar.

Då kan skriva om frågan som:

Query som ger alla som finns i lager
UNION ALL
Query som ger alla som inte finns i lager

Om det kan finnas överlapp kan man skippa nyckelordet ALL. Då tar den endast med unika rader men blir något långsammare.

Trädvy Permalänk
Tangentbordskonnässör
Plats
Örebro
Registrerad
Sep 2005

Vet inte om jag misstolkar din fråga, men borde det inte bara vara att köra följande query ?

SELECT fack, hylla, saldo FROM Storeage WHERE saldo >= 1 GROUP BY fack,hylla ORDER BY fack,hylla

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003
Skrivet av zyberzero:

+-----------+-------+------+-------+ | Artikelnr | Hylla | Fack | Saldo | +-----------+-------+------+-------+ | 12345 | A | 12 | 0 | | 12345 | A | 13 | 1 | | 99999 | B | 2 | 42 | +-----------+-------+------+-------+

Låter det rimligt?

Du är helt klart på rätt spår!
Det enda är att jag inte vill ha med artikelnr med i bilden. Vill bara ha hylla, fack och antalet.
För om jag gör som ovan kommer jag få med tusentals artikelnr som är 0 till antalet i och med att de ligger kvar som historik.

Saldo är alltså inte saldot som det ser ut i tabellen, det är egentligen bara en flagga som visar att artikeln finns i lagret. Ett artikelnr är unikt för just den artikeln. Finns det flera poster av ett nummer är det samma artikel som visar historik. Saldo-flaggan kan bara vara 0 eller 1.

SELECT hylla, fack, COUNT(artikelnr) AS antal FROM Storeage WHERE (saldo = 1) GROUP BY hylla, fack ORDER BY hylla, fack

Denna koden ovan visar helt rätt, förutom att jag inte ser alla lagerplatser med count(artikelnr) 0st saldo=1 så att säga..
Vill kombinera ovan med att visa lagerplatser som är tomma så listan blir komplett.

Det är kanske är ganska unikt upplagd databas, kanske därför det är svårt att förstå hur den är uppbyggd. Anledningen är att kunna följa en artikel historiskt är en central del i hanteringen.

K#

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av atman:

Du är helt klart på rätt spår!
Det enda är att jag inte vill ha med artikelnr med i bilden. Vill bara ha hylla, fack och antalet.
För om jag gör som ovan kommer jag få med tusentals artikelnr som är 0 till antalet i och med att de ligger kvar som historik.

Saldo är alltså inte saldot som det ser ut i tabellen, det är egentligen bara en flagga som visar att artikeln finns i lagret. Ett artikelnr är unikt för just den artikeln. Finns det flera poster av ett nummer är det samma artikel som visar historik. Saldo-flaggan kan bara vara 0 eller 1.

SELECT hylla, fack, COUNT(artikelnr) AS antal FROM Storeage WHERE (saldo = 1) GROUP BY hylla, fack ORDER BY hylla, fack

Denna koden ovan visar helt rätt, förutom att jag inte ser alla lagerplatser med count(artikelnr) 0st saldo=1 så att säga..
Vill kombinera ovan med att visa lagerplatser som är tomma så listan blir komplett.

Det är kanske är ganska unikt upplagd databas, kanske därför det är svårt att förstå hur den är uppbyggd. Anledningen är att kunna följa en artikel historiskt är en central del i hanteringen.

Har du testat SQL-satsen jag skrev ovanför?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Karlstad
Registrerad
Mar 2003
Skrivet av Teknocide:

Har du testat SQL-satsen jag skrev ovanför?

Jisses!
Helt rätt!, var helt insnöad på a count. men såklart om man använder sum så räknas antalet saldo-flaggor och visar då antalet.

TACK för hjälpen!, det var mer basic än jag trodde.

K#