(crm?) sql vraag - dynamisch kolommen kiezen?

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
Goedemorgen allen.

Ik heb een prangende vraag waar ik maar niet uitkom. Stel, ik heb de volgende query.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
select top 100 something.id as 'id',
something.value_0 as 'value 0 (Base)',
something.value_1 as 'value 1 (Base)',
something.value_2 as 'value 2 (Base)',
something.value_3 as 'value 3 (Base)',
something.value_4 as 'value 4 (Base)',
something.value_5 as 'value 5 (Base)',
something.value_6 as 'value 6 (Base)',
something.value_7 as 'value 7 (Base)',
something.value_8 as 'value 8 (Base)',
something.value_9 as 'value 9 (Base)',
something.value_10 as 'value 10 (Base)',
something.year0 as 'year 0' from sometable as something


Dit geeft de eerste 11 jaar (0 tot en met 10) aan values van 'something'. Die kolom value_0 tm 10 geeft alleen niet aan welk kalender jaar deze toe behoort. Dit weet ik zelf echter wel: het jaar van value_0 komt overeen met hetgeen in something.year0 staat. Uiteraard is year0 verschillend voor de meeste rijen

Je begrijpt het waarschijnlijk al: ik wil dus een kolom value 2015, value 2016 .. etc.
Normaliter doe ik dan in excel, met de output hiervan, een offset functie. Maar dat betekent dat ik dan én alle value_0 tot value_10 kolommen nodig heb én die value 2015 tot en met 2025, of hoeveel jaar ik ook zou willen laten zien in dat geval.

Ik zou dit dus eigenlijk in sql willen oplossen, en dan dus gewoon als output krijgen:
code:
1
2
3
4
id
values 2015
values 2016
values 2017


bijvoorbeeld.

Eigenlijk moet ik dus weten
code:
1
2
3
4
select top 100 something.id as 'id',
(geen idee hoe ik hier de juiste value waarde ophaal uit de lijst _0 tot en met _10) as value 2015,
(geen idee hoe ik hier de juiste value waarde ophaal uit de lijst _0 tot en met _10) as value 2016,
(geen idee hoe ik hier de juiste value waarde ophaal uit de lijst _0 tot en met _10) as value 2017 from sometable as something


Kan iemand me hier mee op weg helpen?

Alle reacties


Acties:
  • 0 Henk 'm!

  • Breezers
  • Registratie: Juli 2011
  • Laatst online: 16-03-2021
een top 100 query met een paar tabelnaam aliassen gaat je verhaal niet begrijpbaar maken.

Geef eerst eens wat dummy data die je wilt bewerken (float, integer, Text, time/date etc) ?

Zonder te weten wat de data is waarmee je werkt is de query die je geeft en de beschrijving vrij zinloos....

Als je de dummy data even door
SQLfiddle haalt (http://sqlfiddle.com/) en je dummy data even post, dan kan iedereen je helpen met de juiste query

[ Voor 22% gewijzigd door Breezers op 23-04-2016 08:52 ]

“We don't make mistakes just happy little accidents” - Bob Ross


Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
select top 100 something.id as 'id',
something.value_0 as 'value 0 (Base)',
something.value_1 as 'value 1 (Base)',
something.value_2 as 'value 2 (Base)',
something.value_3 as 'value 3 (Base)',
something.value_4 as 'value 4 (Base)',
something.value_5 as 'value 5 (Base)',
something.value_6 as 'value 6 (Base)',
something.value_7 as 'value 7 (Base)',
something.value_8 as 'value 8 (Base)',
something.value_9 as 'value 9 (Base)',
something.value_10 as 'value 10 (Base)',
something.ecdyear0 as 'ECD year 0',
CASE something.ecdyear0
 WHEN 2009 THEN something.value_7
 WHEN 2010 THEN something.value_6
 WHEN 2011 THEN something.value_5
 WHEN 2012 THEN something.value_4
 WHEN 2013 THEN something.value_3
 WHEN 2014 THEN something.value_2
 WHEN 2015 THEN something.value_1
 WHEN 2016 THEN something.value_0
END as '2016' from sometable as something


Uiteraard kan dit. Maar leek me niet zo een nette oplossing om een hele rits WHEN's toe te voegen en dit dan ook nog eens voor elke kolom die ik wil hebben.

Liever zou ik bv zien dat uhmmm... stel je definieert voor elke kolom een jaartal.

pseudocode iets als
[code]
jaartal=2016
uit data : ecdyear0 = 2016
delta = 2016-2016 > dus 0
dus moet value_0 pakken als waarde

Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
Breezers schreef op zaterdag 23 april 2016 @ 08:39:
een top 100 query met een paar tabelnaam aliassen gaat je verhaal niet begrijpbaar maken.

Geef eerst eens wat dummy data die je wilt bewerken (float, integer, Text, time/date etc) ?

Zonder te weten wat de data is waarmee je werkt is de query die je geeft en de beschrijving vrij zinloos....

Als je de dummy data even door
SQLfiddle haalt (http://sqlfiddle.com/) en je dummy data even post, dan kan iedereen je helpen met de juiste query
uhmmm alle value data zijn floats.
Die ecd year is een integer.

De tabel waar ik data uithaal is huge.
Ga er maar vanuit dat het voor het voorbeeld een id kolom is, 11 value kolommen (float) en een jaar kolom (int)

[ Voor 11% gewijzigd door denpries op 23-04-2016 09:33 ]


Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
zoiets dus http://sqlfiddle.com/#!9/e837e

[ Voor 200% gewijzigd door denpries op 23-04-2016 09:57 ]


Acties:
  • 0 Henk 'm!

  • Edwin88
  • Registratie: Januari 2005
  • Laatst online: 03-10 23:05
Wat is de betekenis van de data die in je velden staat? Wat probeer je uit je database te trekken?
Ik heb het gevoel dat je schema ook niet helemaal handig is ontworpen, maar ik snap niet goed wat het moet voorstellen.

[ Voor 86% gewijzigd door Edwin88 op 23-04-2016 10:02 ]


Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
het zijn 'verwachtte' sales waarden van de eerste X jaar dat het project bestaat.
Maar die eerste X jaar zijn dus gegeven als kolommen value0 ... value10.

Als ik simpel een totaal van 2016 wil hebben kan dat nu dus niet, omdat het jaartal niet direct gekoppeld is aan 0..10 maar via die jaar kolom waarbij dat jaar correspondeert met het jaar van de waarde0

[ Voor 23% gewijzigd door denpries op 23-04-2016 10:50 ]


Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 11:26
Ik zou je aanraden dit artikel eens te lezen:
https://www.simple-talk.c...-errors-you-should-avoid/

Jij maakt de fout die in hoofdstuk 5 is beschreven.

Sinds de 2 dagen regel reageer ik hier niet meer


Acties:
  • 0 Henk 'm!

  • denpries
  • Registratie: Februari 2010
  • Laatst online: 07-06 10:41
CurlyMo schreef op zaterdag 23 april 2016 @ 10:53:
Ik zou je aanraden dit artikel eens te lezen:
https://www.simple-talk.c...-errors-you-should-avoid/

Jij maakt de fout die in hoofdstuk 5 is beschreven.
Goed artikel. Maar Helaas heb ik die fout niet gemaakt maar iemand anders in de database. Of eigenlijk een heel it team. Maar goed

Acties:
  • 0 Henk 'm!

  • CurlyMo
  • Registratie: Februari 2011
  • Laatst online: 11:26
denpries schreef op zaterdag 23 april 2016 @ 20:45:
Goed artikel. Maar Helaas heb ik die fout niet gemaakt maar iemand anders in de database. Of eigenlijk een heel it team. Maar goed
Dan is vervolgens de vraag of je niet de mogelijkheid hebt om het ontwerp goed aan te pakken i.p.v. vrijwel onmogelijke queries te gaan zitten maken.

Sinds de 2 dagen regel reageer ik hier niet meer

Pagina: 1