nocheinnoobmehr
Goto Top

Noob mit Problem - SQL SELECT mit Platzhalter?

Ich komme leider an einem Punkt mit einer Abfrage nicht weiter:

Tabelle
Werte in Spalte1 :
1
2
3
4
...
Werte in Spalte2:
10110
10210
10310
20110
20210
20310
...

Gebe ich ein:
SELECT Spalte1, Spalte2 FROM Tabelle WHERE Spalte1 = '1'  
bekomme ich folglich als Ergebnis:
1 , 10110

Wie kann ich es anstellen, dass ich alle Werte aus Spalte2 angezeigt bekomme, wo die ersten beiden und die letzten beiden Ziffern gleich sind?
Also als Wunschergebnis:
1 , 10110
2 , 10210
3 , 10310

Content-ID: 529289

Url: https://administrator.de/contentid/529289

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

emeriks
emeriks 23.12.2019 aktualisiert um 11:35:25 Uhr
Goto Top
Hi,
hm, mit LEFT und RIGHT?

SELECT Spalte1, Spalte2 FROM Tabelle WHERE LEFT(Spalte2 , 2) = RIGHT(Spalte2 , 2)

E.

Edit: welchen Datentyp hat denn Spalte2 ?
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 12:04:37 Uhr
Goto Top
Beide Spalten Typ Varchar. geht leider nicht.
emeriks
emeriks 23.12.2019 um 12:10:29 Uhr
Goto Top
Zitat von @nocheinnoobmehr:
Beide Spalten Typ Varchar. geht leider nicht.
Warum soll das dann nicht gehen?
akretschmer
akretschmer 23.12.2019 um 12:34:09 Uhr
Goto Top
test=*# select * from nocheinnoobmehr ;
   t   
-------
 10110
 10210
 10310
 20110
 20210
 20310
(6 rows)

test=*# select * from nocheinnoobmehr where substring(t,1,2) = substring(t,4,2) ;
   t   
-------
 10110
 10210
 10310
(3 rows)

test=*# 

Du sollest die verwendete DB nicht geheim halten, bei mir ist es PostgreSQL.
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 13:10:54 Uhr
Goto Top
Sorry, ist MSSQL 2014

@emeriks
Geht nicht, weil bei der Abfrage nichts angezeigt wird.

@akretschmer
Für den einen Fall mit der 1 funktioniert es, aber wie z.B. mit der 2?

Ich glaube, ich muß doch konkreter werden.
Eingabe ist ein EAN13-Code, dem bsp. ein Produkt A 10g mit der Artikelnummer 1001200 zugeordnet ist.
Nun soll aber die Ausgabe alle Produkte ausgeben, die mit Artikelnummer 100 anfangen und mit 200 aufhören.
(Die ersten 3 Stellen sind die Kategorie, 4. Stelle ist die Packungsgröße und die letzten 3 Stellen sind die Produktnummer)

Also wenn ich die EAN13 scanne, sollen als Ausgabe sämtliche Packungsgrößen erfolgen.
akretschmer
akretschmer 23.12.2019 um 13:20:55 Uhr
Goto Top
Zitat von @nocheinnoobmehr:

Sorry, ist MSSQL 2014

@emeriks
Geht nicht, weil bei der Abfrage nichts angezeigt wird.

@akretschmer
Für den einen Fall mit der 1 funktioniert es, aber wie z.B. mit der 2?

da geht das auch. Auch mit der3. Du kannst es testen, es geht auch mit 8. Und 7. Und 9.


Ich glaube, ich muß doch konkreter werden.
Eingabe ist ein EAN13-Code, dem bsp. ein Produkt A 10g mit der Artikelnummer 1001200 zugeordnet ist.

EAN würde ich als EAN speichern, manche Datenbanken haben dafür einen passenden Datentyp, inkl. Prüfzifferberechnung / prüfung.
Sowas sollte man nutzen.


Nun soll aber die Ausgabe alle Produkte ausgeben, die mit Artikelnummer 100 anfangen und mit 200 aufhören.
(Die ersten 3 Stellen sind die Kategorie, 4. Stelle ist die Packungsgröße und die letzten 3 Stellen sind die Produktnummer)


Die Lösung wurde genannt.
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 13:32:46 Uhr
Goto Top
Ok, erstmal vielen Dank für die Aufmerksamkeit!

Als noob muß ich das erstmal in meine DB umsetzen. Hier zur Anschauung, was bisher mein kläglicher Versuch war, aber immer nur ein Datensatz rauskam.

SELECT        tar.cBarcode, CEILING(tar.fArtGewicht * 1000) AS Expr1, dbo.tArtikelBeschreibung.cName, tar.cISBN, CEILING(tar.nMidestbestand) AS Expr5, tar.cArtNr, 
                         SUBSTRING(tar.cArtNr, 0, 4) AS Expr3, SUBSTRING(tar.cArtNr, 4, 1) AS Expr2, SUBSTRING(tar.cArtNr, 5, 3) AS Expr4
FROM            dbo.tArtikelBeschreibung INNER JOIN
                         dbo.tArtikel AS tar ON dbo.tArtikelBeschreibung.kArtikel = tar.kArtikel AND dbo.tArtikelBeschreibung.kPlattform = 1
WHERE        (tar.cBarcode = @key) OR
                         (tar.cArtNr LIKE '((SUBSTRING(tar.cArtNr, 0, 4))+(SUBSTRING(tar.cArtNr, 4, 1))+ (SUBSTRING(tar.cArtNr, 5, 3))')  
---------------------------------------------------------------------------------------------						 
cBarcode	Expr1	cName			cISBN	Expr5	cArtNr	Expr3	Expr2	Expr4
425161511163	160	Ingwer-Tee, 160g	D4	200	3106122	310	6	122
emeriks
emeriks 23.12.2019 um 13:42:07 Uhr
Goto Top
Ich weiß nicht, was Du da machst, aber bei mir funktioniert das mit MSSQL.
Du hast angegeben
Beide Spalten Typ Varchar.
Damit funktioniert das. Ich habe das soeben explizit nachgestellt.

2019-12-23 13_41_23-window

2019-12-23 13_40_16-window

2019-12-23 13_41_00-window
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 14:18:38 Uhr
Goto Top
Spalte1 soll ein eindeutiger Wert sein, wie z.B. eine EAN.
Also müssten bei dir in Spalte1 die Zahlen fortlaufend sein.

Frage ich z.B. dann 5 ab, sollte die Ausgabe wie folgt sein:
4 , 20110
5 , 20210
6 , 20310
emeriks
emeriks 23.12.2019 aktualisiert um 14:22:29 Uhr
Goto Top
Sag mal, du verarschst uns jetzt? Oder?

Erst
Wie kann ich es anstellen, dass ich alle Werte aus Spalte2 angezeigt bekomme, wo die ersten beiden und die letzten beiden Ziffern gleich sind?
Also als Wunschergebnis:
1 , 10110
2 , 10210
3 , 10310
und jetzt
Frage ich z.B. dann 5 ab, sollte die Ausgabe wie folgt sein:
4 , 20110
5 , 20210
6 , 20310
Wieso sollte sie das sein?
emeriks
emeriks 23.12.2019 um 14:23:50 Uhr
Goto Top
Zitat von @nocheinnoobmehr:
Spalte1 soll ein eindeutiger Wert sein, wie z.B. eine EAN.
Also müssten bei dir in Spalte1 die Zahlen fortlaufend sein.
Das ändert nichts an den Treffern meiner Abfrage, weil Spalte1 gar nicht im "where" vorkommt.
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 14:23:51 Uhr
Goto Top
Kein Grund ausfallend zu werden. Wer lesen kann....

Zitat aus meinem ersten Post:
Werte in Spalte1 :
1
2
3
4
...
Werte in Spalte2:
10110
10210
10310
20110
20210
20310
emeriks
emeriks 23.12.2019 um 14:24:28 Uhr
Goto Top
Ja und?
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 14:29:39 Uhr
Goto Top
Zitat von @emeriks:

Ja und?

Frage ich den Wert 4 in Spalte1 ab, soll die Ausgabe nicht nur 20110 sein, sondern ALLE mit 20 am Anfang und 10 am Ende. Besser verständlich.
Sorry, aber ist mir nicht ganz einfach die Problematik zu beschreiben. :/
akretschmer
akretschmer 23.12.2019 um 14:29:43 Uhr
Goto Top
Zitat von @nocheinnoobmehr:

Kein Grund ausfallend zu werden. Wer lesen kann....

Genau. Wer lesen kann, wird erkennen, daß Deine Aussagen absolut widersprüchlich sind.


Frage ich z.B. dann 5 ab, sollte die Ausgabe wie folgt sein:
4 , 20110
5 , 20210
6 , 20310

steht in klaren Wiederspruch zu dem, was Du erst wolltest:

alle Werte aus Spalte2 angezeigt bekomme, wo die ersten beiden und die letzten beiden Ziffern gleich sind?
Also als Wunschergebnis:
1 , 10110
2 , 10210
3 , 10310 

EOD
emeriks
emeriks 23.12.2019 aktualisiert um 14:44:26 Uhr
Goto Top
Zitat von @nocheinnoobmehr:
Frage ich den Wert 4 in Spalte1 ab, soll die Ausgabe nicht nur 20110 sein, sondern ALLE mit 20 am Anfang und 10 am Ende. Besser verständlich.
Das ist jetzt schon wieder eine andere Bedingung!
Sorry, aber ist mir nicht ganz einfach die Problematik zu beschreiben. :/
Offensichtlich. Vielleicht versuchst Du es in 2020 noch einmal? Wenn der Neujahrsrausch ausgeschlafen ist.
nocheinnoobmehr
nocheinnoobmehr 23.12.2019 um 15:04:55 Uhr
Goto Top
Zitat von @emeriks:

Zitat von @nocheinnoobmehr:
Frage ich den Wert 4 in Spalte1 ab, soll die Ausgabe nicht nur 20110 sein, sondern ALLE mit 20 am Anfang und 10 am Ende. Besser verständlich.
Das ist jetzt schon wieder eine andere Bedingung!
Sorry, aber ist mir nicht ganz einfach die Problematik zu beschreiben. :/
Offensichtlich. Vielleicht versuchst Du es in 2020 noch einmal? Wenn der Neujahrsrausch ausgeschlafen ist.
Okidoki, ihr seit die Profs. Ich werde mein Glück weiter versuchen, da wir auch zwischen den Feiertagen arbeiten und die Infos für die Mitarbeiter unserer kleinen Manufaktur ziemlich wichtig sind.

Schönes Fest und "berauschten" Jahreswechsel!^^
BirdyB
BirdyB 23.12.2019 um 16:12:20 Uhr
Goto Top
Moin,

so wie ich die letzte Version deiner Aufgabenstellung verstanden habe, musst du die Tabelle mit sich selbst joinen. Die Bedingungen stehen schon oben.
Wenn ich nachher am Rechner bin, kann ich dir ggf. auch etwas SQL dazu schreiben.

VG
nocheinnoobmehr
nocheinnoobmehr 24.12.2019 um 09:57:47 Uhr
Goto Top
Zitat von @BirdyB:

Moin,

so wie ich die letzte Version deiner Aufgabenstellung verstanden habe, musst du die Tabelle mit sich selbst joinen. Die Bedingungen stehen schon oben.
Wenn ich nachher am Rechner bin, kann ich dir ggf. auch etwas SQL dazu schreiben.

VG
Hm, wenn das geht wären die Feiertage gerettet.^^ Ich hab gestern noch versucht am WHERE zu schrauben, leider ohne Erfolg.
thx fürs Drüberschauen
em-pie
Lösung em-pie 24.12.2019 um 10:24:41 Uhr
Goto Top
Moin,

also wenn ich dich richtig verstanden habe, willst du unter angabe des Wertes aus Spalte A diejenigen finden, die in SPalte B dem selben Muster entsprechen.

Der Weg über ein Join mit sich selbst sollte klappen:

SELECT
 primaer.*
 , sekundaer.*
FROM
 yourTable as primaer
INNER JOIN yourTable as sekundaer
 on RIGHT(primaer.B, 2) = RIGHT(sekundaer.B, 2) AND LEFT(primaer.B, 2) = LEFT(sekundaer.B, 2)
WHERE
 primaer.A = 5

Code ist völlig ungetestet

Fernab:
Kommunikation basiert auf zwei Seiten: dem Sender und dem Empfänger
Wenn der Sender die NAchricht nicht hinreichend eindeutig übermittelt, darf dieser sich nicht beschweren.

Gruß
em-pie
BirdyB
Lösung BirdyB 24.12.2019 aktualisiert um 10:39:33 Uhr
Goto Top
Moin,

ungefähr so:
select
a.nr,
b.*
from testdaten as a
left outer join testdaten as b on left(a.ean,2)=left(b.ean,2) and right(a.ean,2)=right(b.ean,2)
where a.nr=5
greenshot 2019-12-24 10.36.35
greenshot 2019-12-24 10.36.09

Frohe Weihnachten...

EDIT: em-pie war schneller...
emeriks
emeriks 24.12.2019 um 11:01:15 Uhr
Goto Top
Respekt! Eure Glaskugel ist deutlich leistungsfähiger als meine. Ich denke, dass ich über Euch verstanden habe, was der TO höchstwahrscheinlich will. Und, falls das dann stimmen sollte, dass er offenbar nicht in der Lage ist, das auch nur im Entferntesten zu artikulieren. Meine Fresse ...

Ich will, so mit Spitze, und rund. Aber nicht oben. Und nur gelb und braun. Geht auch rot. Und wie kann ich das anstellen, dass das dann auch heiß geht? Ich meine, ohne das Runde platt zu machen? Vielleicht sogar doppelt?
nocheinnoobmehr
nocheinnoobmehr 24.12.2019 um 11:07:31 Uhr
Goto Top
@em-pie und @BirdyB
yeah... danke fürs Verstehen und nochmal sorry @all, dass ich im formulieren der Frage nicht eindeutig genug war.

Ein wunderbares Weihnachtsgeschenk, nicht nur für mich. Es ist extrem hilfreich für uns, wenn zu einem Artikel der abgefüllt wird, alle anderen Artikel gleicher Art auch mit Daten wie bspw Ist- und Sollbestand angezeigt werden. DAS geht für uns jetzt. face-smile

Euch auch frohe Weihnachten und Geschenke, die euch glücklich machen.