Opgelost Nieuwe regel notaties

Dit topic is als opgelost gemarkeerd

Chefke22

Gebruiker
Lid geworden
27 okt 2022
Berichten
25
Momenteel heb ik een SQL gemaakt,

Select
Kolom1 as Ordernr,
Kolom2 as ExternNr,
.....
From database


welke diverse data ophaalt, bijv.:

OrderNr | ExternNr | Leverdatum | Artikel | Barcodes
300246 | Test246 | 2024-02-05 | 1010 | K5279TR,K6679TR,K5569TR,K4229TR,K52798F,K573JD4

Nu zie je onder de kolom barcode veel records staan, welke allemaal gescheiden worden met een "," :
"K5279TR, K6679TR, K5569TR, K4229TR, K52798F, K573JD4"

Dit staat allemaal in 1 regel, maar ik wil dat hier allemaal aparte regels voor worden aangemaakt, zoals dit:

OrderNr | ExternNr | Leverdatum | Artikel | Barcodes
300246 | Test246 | 2024-02-05 | 1010 | K5279TR
300246 | Test246 | 2024-02-05 | 1010 | K6679TR
300246 | Test246 | 2024-02-05 | 1010 | K5569TR
300246 | Test246 | 2024-02-05 | 1010 | K4229TR
300246 | Test246 | 2024-02-05 | 1010 | K52798F
300246 | Test246 | 2024-02-05 | 1010 | K573JD4


Hoe moet de SQL code worden als ik dit voor elkaar wil krijgen?

Graag verneem ik.
 
Dat is duidelijk een vorm van een niet-genormaliseerde tabel, want normaal gesproken zou je die data in een koppeltabel hebben staan. Er vanuit gaande dat die barcodes staan voor aparte objecten waar je meer kenmerken van opslaat in de tabel. Dat elke barcode dus bijvoorbeeld voor een apart apparaat staat. Dus daar begint het al mee.

Je vraag is niet goed te beantwoorden zonder te weten met welke database je werkt. Maar ik vermoed dat je iets als dit zoekt :).
 
Ja elke barcode is een apart apparaat, dus moet daarom inderdaad als een aparte regel toegekend worden

Lijkt het wel op inderdaad

Hoe dit toe te passen in de query?
 
er staan onderaan de link een aantal voorbeelden. Take your pick :).
 
ja ik zit daar ook mee te 'stoeien'
en moet inderdaad zoiets zijn als onder dit hoofdstuk

B. Split comma-separated value string in a column​


maar krijg elke keer deze melding, en dat bij van allerlei functies...alsof niet ondersteund wordt in deze SQL database (ODBC driver)
1712741043636.png
 
En dáárom vroeg je je in #2 met welke database je werkt. Dit voorbeeld is van Microsoft, dus werkt met Transact-SQL op Microsoft SQL Server (2022). Werk jij met Oracle, dan heb je geheid een andere functie die dat doet. Aangezien ik mijn glazen bol nét heb verkocht op Marktplaats, kan ik dat vanuit mijn kamertje natuurlijk niet zien ;).
 
Dat snap ik, en wist niet dat je dat bedoelde, excuus :)

Werk met Database Query (ODBC koppeling) / SQL server

Weet niet welke code er dan wel goed moet werken?
Heb hier niet zoveel verstand van...
dacht eigenlijk...SQL code...is SQL code :)

Heb ik nu wat meer in je verkochte glazen bol gestopt? :)
 
dacht eigenlijk...SQL code...is SQL code :)
Nou nee, bepaald niet. Net zoals Fries wel onder het Nederlands valt net als Limburgs, maar dat ze elkaar dus bepaald niet verstaan als ze elkaar in een kroeg in Utrecht tegenkomen :).

Als je met SQL server werkt, moet het gewoon werken in een query die je in Management Studio maakt. Maar je hebt het over een ODBC koppeling, en dan vermoed ik dat je in een ánder pakket werkt. Wellicht Access?
 
hahaha, ja mooi verwoord

werk met King Task centre, waarin je een taak kan aanmaken
en dan een koppeling naar het ERP systeem, waarin je een input maakt met een ODBC koppeling en dan kan kiezen om een SQL query te maken en data uit het ERP systeem te trekken...

verdere info heb ik er ook niet over :(


Zie wel dit staan in de handleiding:

Configuratie 1. 2. Script Objects voor Administrator en eventueel andere user(s): “Allow this user the use of System.GetObject() in script“ is aangevinkt; Input Tool Database Query (ODBC): a. KingDataDigger connectie opnemen. b. SQL instellingen KingDataDigger: SQL Join Syntax (SQL-92 Standard), Currency locale (English / United States). c. Connectie instellingen KingDataDigger: Use Pass-Through aangevinkt.
 
Ik ken King Task Centre niet, maar ik vermoed dat dat slechts de interface met de database verzorgt, die in je ERP systeem zit. Dit soort queries op een grote database moet je ook eigenlijk aan de DBA overlaten, en niet zelf maken. Tenzij jij natuurlijk de dienstdoende DBA bent :). Maar dan had je geweten welke SQL versie er gebruikt wordt :).
 
dit nog nooit hoeven achterhalen, vandaar:)

zie wel bij databaseserver eigenschappen:

Bestandsversie 17.0.11.7236
SQL anywhere
Copyright 2022 SAP

Weet je dan wel genoeg? :)
 
in SQL-server gebruik je de functie string_split. Bijvoorbeeld:

select value from string_split('a-b-c','-')

geeft als resultaat
a
b
c

Je kan de functie met een cross apply in een query gebruiken

bv
select ordernr, externnr, leverdatum, artikel from MyTablename cross apply string_split(Barcodes,',')
 
Laatst bewerkt:
Als ik StringSplit gebruikt krijg ik deze melding:
1712741043636.png
 
Dan bestaat deze functie niet in het database systeem dat jij gebruikt. STRING_SPLIT is een functie die vanaf SQL server versie 2016 beschikbaar is. Uit je info begrijp ik dat je SQL anywhere van SAP (oude sybase) gebruikt. Dan kan je :
  • kijken of dit systeem een vergelijkbare functie heeft, je kan hier even zoeken: https://infocenter.sybase.com/help/...reference/sa-split-list-system-procedure.html
  • of het resultaat van je query naar Excel downloaden en daar in de vorm zetten die je nodig hebt
  • of aan de SAP mensen vragen om een query/view/procedure te schrijven die je het juiste resultaat geeft, maar ervaring leert dat iets aan SAP developers vragen meestal lang duurt
 
In Access is het simpel op te lossen, en als je de ODBC connectie daar kan koppelen, zou ik niet naar Excel stappen, maar het in Access proberen.
 
Ik ben tamelijk bekend met SAP, en die laat geen Office connecties toe. Je kan, naast de eigen interface, wel standaard lijsten downloaden naar Excel en daarmee verder werken.
 
Bedankt voor jullie reacties.

Heb het nu op de volgende manier op kunnen lossen:

SELECT split.row_value AS Barcodes,
Tabel.kolom1 AS Kolom2
FROM tabel JOIN sa_split_list(barcodes, ',') AS split ON 1 = 1
WHERE split.row_value <> '';
 
Terug
Bovenaan Onderaan