[SQL] Extra kolom aan select query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • doak
  • Registratie: Oktober 2001
  • Niet online
Volgens mij is het niet mogelijk maar wil toch een poging wagen. Ik heb een bestaande database die gevuld is en waar ik wat gegevens uit wil hebben. Hieronder een versimpelde structuur

Table Units
units_iditem_iditem_nameitem_index
33500AppName1889
34500GroupName-0011889
35500AppName21989
36500GroupName-0021989


item_index bestaat steeds maar uit sets van twee, dus het getal komt niet voor een derde keer voor.

Als output zou ik graag willen:

33500AppName1889GroupName-001


Is dit mogelijk? Het hierboven getoonde is een versimpelde vorm van de echte database. Heb zelf ook al query's gemaakt om output te krijgen maar kreeg dit niet voor elkaar. Query's voer ik uit via ms sql management studio. Alvast dank

_/-\o_

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 13-09 22:03

Matis

Rubber Rocket

SQL:
1
select * from Units group by item_index order by units_id ASC

ofzo :?

Bij MySQL is het mogelijk om ook de group by clausule op te nemen in het resultaat. Andere RDBMS (MSSQL bijvoorbeeld) laten dat niet toe en je zult dan dus ook niet item_name kunnen selecteren.

[ Voor 74% gewijzigd door Matis op 10-10-2011 21:43 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Joinen op zichzelf, met als conditie dat de item_index hetzelfde is en units_id groter is.

Acties:
  • 0 Henk 'm!

  • doak
  • Registratie: Oktober 2001
  • Niet online
Thx for reply's zal morgen nog eens even op kantoor kijken welke query ik gemaakt had :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Matis schreef op maandag 10 oktober 2011 @ 21:39:
SQL:
1
select * from Units group by item_index order by units_id ASC

ofzo :?

Bij MySQL is het mogelijk om ook de group by clausule op te nemen in het resultaat. Andere RDBMS (MSSQL bijvoorbeeld) laten dat niet toe en je zult dan dus ook niet item_name kunnen selecteren.
Sorry? Natuurlijk mag je wel selecten waar je op groupt. Sterker nog, in alle andere DBMS'en dan MySQL moet je alles selecten waar je op groupt (en andersom). 8)7 Daarnaast zie ik niet helemaal wat jouw query überhaupt zou moeten doen, in elk DBMS behalve MySQL gaat die query keihard fout, en in MySQL filter je één van de twee waarden die de topicstarter wil hebben weg. En welke van de twee is dan ook nog eens semi-random. :P

De oplossing van GlowMouse is de meest praktische die ik ken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • doak
  • Registratie: Oktober 2001
  • Niet online
En de punten gaan naar GlowMouse :>

Ik moet er nog wat dingen aan veranderen maar voor nu is dit het geworden:

SQL:
1
2
3
4
5
6
7
8
9
select distinct 
Units.projectid, lower(Units.name) as 'Application_name', 
procesdata.procesid, procesdata.itemid, procesdata.itemcol, procesdata.itemvalue, procesdata.itemindex, 
PD.itemvalue as '-- PD Value --', PD.itemcol as 'PD itemcol' , PD.Procesid, PD.Itemid, PD.itemindex 
FROM Units 
INNER JOIN Proces on Units.unitid=Proces.Unitid INNER JOIN ProcesData on proces.procesid=procesdata.procesid INNER JOIN ProcesData as PD on procesdata.procesid=PD.procesid 

where ProcesData.itemid=PD.itemid AND ProcesData.itemindex=PD.itemindex AND ProcesData.ItemValue like '%[_]S[DG][_]%' AND pd.itemcol='1' AND ProcesData.itemcol='0' AND Units.projectid='25' 
Order by procesdata.procesid ASC 


Dus een self-joining was noodzakelijk. Bedankt voor de juiste richting!

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

For the record, bij sommige databases (PostgreSQL) kan je dit probleem ook oplossen door een DISTINCT ON clause te gebruiken.

Bij MSSQL is dit helaas niet mogelijk en heb je dus een inner join nodig

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 06-09 02:30

dusty

Celebrate Life!

doak schreef op dinsdag 11 oktober 2011 @ 17:54:
En de punten gaan naar GlowMouse :>

Ik moet er nog wat dingen aan veranderen maar voor nu is dit het geworden:
[...]
Dus een self-joining was noodzakelijk. Bedankt voor de juiste richting!
Voor je versimpelde data structuur zou de volgende query voldoen;
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  select
    U1.units_id,
    U1.item_id,
    U1.item_name,
    U1.item_index,
    U2.item_name
  from
    Units  U1
  inner join 
    Units  U2
  on
    U1.item_index=U2.item_index
  where
    U1.units_id<U2.units_id

In jouw query is de where statement erg limiterend, en als je er een distinct op moet gebruiken waarschijnlijk ook nog eens fout.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR

Pagina: 1