Hur definerar du vad som är låg lönsamhet?
De 10 med lägst omsättning?
Under halva medianvärdet?
Mindre än 30 % av den med högst omsättning?
Hur vet du vilken kund som köpt vilken produkt?
7 svar · 277 visningar · startad av wazid
Hej
Så här är läget:
Jag har en databas där jag kan få ut en lista med kunders omsättning (lönsamhet), sorterad i fallande ordning.
Sedan kan jag få ut en lista på produkters omsättning (lönsamhet) i fallande ordning.
Jag har sparat dessa två som vyer.
Nu skulle jag vilja kunna få ut tex de produkter som finns långt ned på listan och som endast köps av kunder som är långt ned på sin lista.
Vill alltså få ut olönsamma produkter som köps av olönsamma kunder.
Någon som har lite ledtrådar på hur man ska göra...
MvH
David
Hur definerar du vad som är låg lönsamhet?
De 10 med lägst omsättning?
Under halva medianvärdet?
Mindre än 30 % av den med högst omsättning?
Hur vet du vilken kund som köpt vilken produkt?
Låt oss säga att jag vill köra efter 80/20 regeln.
De som är bland de 20% högsta är bra. De övirga 80% är inte bra.
Jag har en försäljningstabell med alla orderrader och i den har jag kundnr och artikelnr.
Jag skulle tro att den kan bli användbar.
MvH
David
av => vy för artiklar
-------------------------
artikelnr
total -- total försäljning för denna artikel
kv => vy för kunder
-------------------------
kundnr
total -- totalt köp för denna kund
forsaljning => ordertabell
---------------------------------
artikelnr
kundnr
select * from forsaljning
where artikelnr in(
select av1.artikelnr
from av av1,
av av2
where av1.total >= av2.total
group by av1.artikelnr,av1.total
having count(*) <= (select 0.8*(count(*)+0.0) from av))
and kundnr in(
select kv1.kundnr
from kv kv1,
kv kv2
where kv1.total >= kv2.total
group by kv1.kundnr,kv1.total
having count(*) <= (select 0.8*(count(*)+0.0) from kv))
Ja, det verkar bli ett resultat.
Jag får återkomma då jag validerat resultatet.
Det tar väldigt lång tid dock.
Nu har vi ganska många orderrader.
Jag avbröt körningen efter 10 timmar..
MvH
David
No körde jag igenom hela orderradstabellen för ett år.
Det tog 34 timmar....
Jag få ut ett resultat, men jag tror att jag får med alla produkter som är olönsamma.
Jag vill enbart få med em om de endast köps av kunder som är olönsamma.
Jag borde nog kunna köra distinct på Försäjlning, så att det inte blir så många rader att loopa igenom.
Kanske man ska gå tillväga på något annat sätt?
Kan man i frågan istället jämföra kunderna mot en tabell där jag har med enbart de kunder som är lönsamma.
Och om produkten har en träff i denna tabellen, så ska produkten inte tas med i slutresultatet.
MVH
David
Jag få ut ett resultat, men jag tror att jag får med alla produkter som är olönsamma.
Jag vill enbart få med em om de endast köps av kunder som är olönsamma.
Då jag har AND mellan villkoren så borde resultatet bli det du vill. Om jag tänker rätt så borde du få med 64 % av alla försäljningar.
Att, som du är inne på, skapa temporärtabeller (indexerade på artikelnr och kundnr respektive) som enbart innehåller relevanta poster borde snabba upp det väsentligt.
Ok jag försöker på ett annat sätt, men får inte till det riktigt.
Jag loopar igenom orderraderna (forsaljning)
och vill bara få med de som inte förekommer i nästa selectsats.
I den selectsatsen så har jag gjort en tabell av de lönsamma kunderna och alla orderrader som de tillsammans har gjort.
select distinct kundnr, artikelnr from forsaljning
where not exists(
SELECT
[874_lonsamma_kunder].kundnr, Forsaljning.artikelnr
FROM
[874_lonsamma_kunder]
INNER JOIN Forsaljning
ON [874_lonsamma_kunder].kundnr = Forsaljning.kundnr
)
Men jag får ut ett tomt resultat.....
Någon som ser felet?
MvH
David