Hallo liebe Leute,
ich habe folgendes Problem:
in der Spalte x steht abcedf (varchar), dann soll der dritte Wert (integer) aus der Spalte y ausgegeben werden, wenn in x nicht abcdef steht, dann der erste
Könnte mir hier bitte jemand dazu helfen?
Viele Grüße und Danke:-)
Announcement
Collapse
No announcement yet.
3. Integer Wert unter einer Bedingung ausgeben
Collapse
This topic is closed.
X
X
-
3. Integer Wert unter einer Bedingung ausgeben
Tags: None
-
Hmm... du sagst immer nur
Originally posted by claudine99 View Post...funktioniert so nicht
Originally posted by claudine99 View Post...so dass bei der Version 'abcdef' der erste und der zweite Datensatz nicht ausgegeben werden
Auf alle Fälle wird es wohl darauf hinauslaufen, eine separate Abfrage für die "normalen" Datensätze zu machen und mit einem UNION den Sonderfall 'abcdef' hinzuzufügen.
Gruß Falk
P.S.: Ach ja und bitte Formatierung von SQL in Beiträgen beachten!
Leave a comment:
-
Hallo,
also MSN not in (5,9) funktioniert so nicht, da tgl. neue Daten importiert werden.
Problem ist gelöst über RowNumber:-)
SELECT MSN ,
ImportDate ,
yyy ,
Version ,
ROW_NUMBER() OVER ( PARTITION BY yyy ORDER BY yyy DESC ) AS RN
FROM tablem
WHERE Version = 'abcdef';
Viele GrüßeZuletzt editiert von claudine99; 10.07.2012, 13:24.
Leave a comment:
-
Ok, hab ich also vollkommen falsch spekuliert, es geht nicht um eine Differenzierung innerhalb eines Datensatzes, sondern reines Filtern.
Dein "3. Wert" meint den 3. Datensatz.
Das klingt nach Reihenfolge, also Order By, ist aber für diese Anforderung vollkommen egal, zumindest nach Deinen letzten Erläuterungen. Dein Kriterium ist ganz klar: Satz mit Version 'abcd' und MSN 5 oder 9 müssen rausgefiltert werden.
[highlight=sql]where not (Version = 'abcd' and MSN in (5,9))[/highlight]
3. oder andere Werte interessieren SQL idR nicht. SQL arbeitet mengenorientiert. Ein Select erzeugt ohne Verwendung von ORDER BY eine Ausgabe in zufälliger, nicht fester, nicht reproduzierbarer Reihenfolge, auch wenn es meist anders aussieht. (Nur falls du zufällig doch mit Sortierung arbeiten musst)
Tipp für später:
Die Daten riechen danach, dass sie 'leben'. Hier wäre m.E. eine weitere Spalte sinnvoll, die per Flag anzeigt, in welchem Kontext, Status der jeweilige Datensatz steht. Diese Flags werden dann bei neuen Versionen angepasst, nicht das SQL Statement. Das könnte von da an einfach lauten 'where status = 'A(ktiv)' oder so.
P.S.: Ah, da hat Falk auch schon was geschrieben- vor allem was ganz anderes . Da sieht man, wie unklar eine Frage formuliert werden kann.
Naja, ich lass es mal so stehen, vlt nützt es irgendjemand.
Leave a comment:
-
Hallo,
Originally posted by claudine99 View Post...Nun soll von der Version "abcd" die MSN aber erst mit der 23 ausgegeben werden und die beiden ersten "missachtet", bzw. dürfen gar nicht ausgegeben werden.
[highlight=sql]
select Version, max(MSN) last_msn
from <tabelle>
where Version = 'abcd'
group by Version
[/highlight]
Wäre eine Lösung für dein konkretes Beispiel, ob das aber deine Aufgabe generell löst weiß ich nicht. Dafür ist deine Problemstellung zu ungenau.
Gruß Falk
Leave a comment:
-
Hallo Emetiel,
umwandeln darf ich leider nicht, weil die Programme, die diese View nutzen, dann nicht mehr funktionieren...
Viele Grüße
Leave a comment:
-
Hallo Defo,
es geht hier um Maschinen und Versionen.
Die Tabelle hat unter anderem die Spalten Version und MSN. Alle Versionen sind so gültig, wie in der Tabelle festgelegt, ausser eine.
Bsp.
Version MSN
abcd 5
efgd 7
abcd 9
mnjk 10
abcd 23
efgd 9
Nun soll von der Version "abcd" die MSN aber erst mit der 23 ausgegeben werden und die beiden ersten "missachtet", bzw. dürfen gar nicht ausgegeben werden.
Ich hoffe, da war verständlich:-)
Viele Grüße
Claudia
Leave a comment:
-
Originally posted by claudine99 View Postleider geht Substring nicht, weil Spalte y den Datentyp integer hat:-(
z.B.:
Code:SELECT CASE WHEN T.X = 'abcdef' THEN SUBSTRING( cast( T.y as varchar( 10 ), 3, 1 ) ELSE SUBSTRING( cast( T.y as varchar( 10 ), 1, 1 ) END FROM TABLE
Leave a comment:
-
Originally posted by claudine99 View PostHallo Defo,
leider geht Substring nicht, weil Spalte y den Datentyp integer hat:-(
Grüße Claudia
Beispieldaten sind immer anschaulich, am besten gleich für mehrere, verschiedene(!) Datensätze.
Leave a comment:
-
Hallo Defo,
leider geht Substring nicht, weil Spalte y den Datentyp integer hat:-(
Grüße Claudia
Leave a comment:
-
Wie ist denn Spalte y aufgebaut, woraus bildet sich in der Spalte y der 3. oder 1. Wert?
Vorschlag (das Substring musst du ggF an Deinen Aufbau anpassen):
[highlight=sql]
SELECT CASE
WHEN T.X = 'abcdef' THEN
SUBSTRING(T.y, 3, 1)
ELSE
SUBSTRING(T.y, 1, 1)
END
FROM Table T
[/highlight]
Leave a comment:
Leave a comment: