SQL of andere oplossing

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Stel je neemt twee tabellen (2016 en 2017), vervolgens wil je vergelijken hoeveel dit veranderd is t.o.v. van vorig jaar, hoe dat te doen?

De volgende problemen/uitdagingen kom ik tegen:
- In 2016 zijn bepaalde onderdelen niet aanwezig, die wel in 2017 zitten, en visa versa
- Het *moet* matchen op basis van twee velden (cat. en tag), maar dat wordt wel wat verwarrend

Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2016:
+----+-----------+-----+-------------------------+
| ID | Categorie | Tag | Omschrijving            |
+----+-----------+-----+-------------------------+
| 1  | Computer  | HDD | WD 105D                 |
+----+-----------+-----+-------------------------+
| 2  | Computer  | CPU | i5-2400                 |
+----+-----------+-----+-------------------------+
| 3  | Computer  |     | Deze heeft dus geen tag |
+----+-----------+-----+-------------------------+
| 4  | Computer  | CPU | i5-3200                 |
+----+-----------+-----+-------------------------+

2017:
+----+-----------+--------+-------------------------+
| ID | Categorie | Tag    | Omschrijving            |
+----+-----------+--------+-------------------------+
| 1  | Computer  | HDD    | WD 105D                 |
+----+-----------+--------+-------------------------+
| 2  | Computer  | CPU    | i5-2400                 |
+----+-----------+--------+-------------------------+
| 3  | Computer  |        | Deze heeft dus geen tag |
+----+-----------+--------+-------------------------+
| 4  | Computer  | CPU    | i5-3200                 |
+----+-----------+--------+-------------------------+
| 7  | Computer  | CPU    | i7-5200                 |
+----+-----------+--------+-------------------------+
| 5  | Software  | Office | Office 2016             |
+----+-----------+--------+-------------------------+
| 6  | Software  |        | Wederom geen tag        |
+----+-----------+--------+-------------------------+


Gewenste resultaat:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
+----+-----------+--------+-------------+-------------+
| ID | Categorie | Tag    | Aantal 2016 | Aantal 2017 |
+----+-----------+--------+-------------+-------------+
| 1  | Computer  | HDD    | 1           | 1           |
+----+-----------+--------+-------------+-------------+
| 2  | Computer  | CPU    | 2           | 3           |
+----+-----------+--------+-------------+-------------+
| 3  | Computer  |        | 1           | 1           |
+----+-----------+--------+-------------+-------------+
| 5  | Software  | Office | 0           | 1           |
+----+-----------+--------+-------------+-------------+
| 6  | Software  |        | 0           | 1           |
+----+-----------+--------+-------------+-------------+


Wat ik al geprobeerd:
Tags gemerged, vervolgens daarna matchen. Dit werkt en je kan in Excel bijvoorbeeld via VLOOKUP heel eenvoudig zien hoevaak iets voorkomt en welke niet.
Echter dient de categorie er ook bij meer worden opgeteld, het is namelijk mogelijk dezelfde tag gebruikt wordt in bijvoorbeeld Software en ook in Computer.

Heeft iemand een tip hoe ik dit zou kunnen aanpakken?
Ben nu bezig het om te gooien naar Access, maar denk dat ik meer moet gaan mergen of met analyse software aan de slag moet.

Alvast bedankt! :)

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
HollowGamer schreef op vrijdag 10 februari 2017 @ 11:34:
Stel je neemt twee tabellen (2016 en 2017),
Daar zit meteen je eerste probleem al. Waarom is dit niet genormaliseerd naar een enkele tabel? Kun je daar nog wat aan doen of is dit zo'n gevalletje "ik zou wel willen maar dat kan niet want baas/leverancier/3rd party gaat hierover"?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
RobIII schreef op vrijdag 10 februari 2017 @ 11:55:
[...]

Daar zit meteen je eerste probleem al. Waarom is dit niet genormaliseerd naar een enkele tabel? Kun je daar nog wat aan doen of is dit zo'n gevalletje "ik zou wel willen maar dat kan niet want baas/leverancier/3rd party gaat hierover"?
Het zijn twee aparte gegevenssets. Het wordt mij inderdaad zo aangeleverd, maar zou het natuurlijk kunnen omzetten naar één enkele tabel.

Nog niet eens zo'n slecht idee, want dan zou ik bijvoorbeeld een insert kunnen doen naar een tabel en dan matchen of de cat. en tag bestaat.
Denk dat ik maar beter gebruik kan maken van scripting taal, tabel1 schrijven naar een array, tabel2 er doorheen lopen (+1 bij al bestaande combinatie) en vervolgens resultaat printen.

Met Excel en Access ben ik denk wat minder flexibel. Liefst zoek een tool waarmee een 'leek' gewoon op een knopje kan drukken, maargoed een script moet ook wel lukken. ;)

[ Voor 13% gewijzigd door HollowGamer op 10-02-2017 12:02 ]


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
HollowGamer schreef op vrijdag 10 februari 2017 @ 12:01:
[...]

Het zijn twee aparte gegevenssets. Het wordt mij inderdaad zo aangeleverd, maar zou het natuurlijk kunnen omzetten naar één enkele tabel.

Nog niet eens zo'n slecht idee, want dan zou ik bijvoorbeeld een insert kunnen doen naar een tabel en dan matchen of de cat. en tag bestaat.
Denk dat ik maar beter gebruik kan maken van scripting taal, tabel1 schrijven naar een array, en vervolgens resultaat printen.
Geen idee hoe je nu de vervolgstappen aan 't uitdenken bent, maar bedenk dus dat er, als je er 1 tabel van maakt, dus een jaartal veld bij komt om zo 't onderscheid tussen gegevens van 2016 en 2017 te kunnen maken. Waarom je dan over scripting en arrays begint zie ik even niet; wat je wil is prima met een query op te lossen. Maar babysteps ;)
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
RobIII schreef op vrijdag 10 februari 2017 @ 12:03:
[...]

Geen idee hoe je nu de vervolgstappen aan 't uitdenken bent, maar bedenk dus dat er, als je er 1 tabel van maakt, dus een jaartal veld bij komt om zo 't onderscheid tussen gegevens van 2016 en 2017 te kunnen maken. Waarom je dan over scripting en arrays begint zie ik even niet; wat je wil is prima met een query op te lossen. Maar babysteps ;)

[...]
Ha, daar heb je wel gelijk in. Het is echter zo dat bij databases de link leg tussen relaties (SQL, dus niet noSQL), waardoor ik al snel ga denken in scripting. :P

Ga het proberen, bedankt voor de input, en kom er zeker op terug. :)

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 11-09 08:54
Je kunt toch eerst voor beide tabellen afzonderlijk een group by op category en tag doen en dan de row counts per groep selecteren. Vervolgens kun je deze met een outer join aan elkaar koppelen op category en tag lijkt me.

Acties:
  • +1 Henk 'm!

  • Sabbi
  • Registratie: December 2000
  • Laatst online: 23:38

Sabbi

je denkt aan mij.

Dit is toch echt twee seconden werk in Excel met een draaitabel?

Afbeeldingslocatie: https://i.imgur.com/g87Y9lK.png

[ Voor 3% gewijzigd door Sabbi op 10-02-2017 12:31 ]


Acties:
  • 0 Henk 'm!

  • HollowGamer
  • Registratie: Februari 2009
  • Niet online
Sabbi schreef op vrijdag 10 februari 2017 @ 12:30:
Dit is toch echt twee seconden werk in Excel met een draaitabel?

[afbeelding]
Nvm.: dat was easy! Alle data onder elkaar zetten, vervolgens de Pivot aanmaken, toppie!
Bedankt. :)

[ Voor 28% gewijzigd door HollowGamer op 10-02-2017 14:13 ]

Pagina: 1