MS SQL: Zwei numeric-Felder in neuem Feld verbinden

Mitglied: Bluejet

Bluejet (Level 1) - Jetzt verbinden

23.03.2016 um 11:04 Uhr, 1117 Aufrufe, 9 Kommentare

Hallo zusammen,


ich melde mich einmal mit einer wahrscheinlich sehr einfachen Sache, bei der ich jedoch gerade etwas hänge...
Es geht um folgendes:

Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)

Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Nur als kleine Info, wofür ich das brauche - mir ist nur dieser Lösungsweg auf die Schnelle eingefallen.
Falls ich hiermit jedoch auf dem Holzweg bin, gerne auch andere Tipps - bin wahrlich kein SQL-Experte, möchte das aber gerne lösen und etwas dazulernen. :-) face-smile


Wäre sehr dankbar, wenn mich hier jemand in die richtige Bahn lenken könnte.



Besten Dank!
Mitglied: BirdyB
23.03.2016 um 11:27 Uhr
Hi,

alternativ zum Vorschlag von @114757 könntest du auch mit DATEFROMPARTS() aus Monat und Jahr ein Datum erstellen lassen.
Damit könntest du evtl. auftretende Sortierprobleme vermeiden. (Alphanumerische Sortierung vs. numerische Sortierung / Sortierung nach Datum)
https://msdn.microsoft.com/de-de/library/hh213228(v=sql.120).aspx

Beste Grüße!


Berthold
Bitte warten ..
Mitglied: Biber
23.03.2016, aktualisiert um 11:52 Uhr
Moin bluejet,


Zitat von @Bluejet:
Ich möchte eine View erstellen und in dieser zwei numeric-Felder aus den Quelltabellen miteinander verbinden (Monat und Jahr) .
Diese sollen aber durch einen Punkt getrennt sein und anschließend im Ergebnis so aussehen: 1.2016 (Feld 'Monat'=1 | Feld 'Jahr'=2016)

Hintergrund ist der, dass ich in einem Report auch einen Jahreswechsel miteinschließen kann, sprich sagen kann: [...] where NeuesFeldAusDerView >=9.2015 and <=3.2016
Ganz schlechter Plan.
Wenn du ein künstliches (Text-)Feld so wie skizziert erzeugst, dann bekommst du bei einen Kleiner/größer/between ganz unsinnige ergebnisse.
Bzw. in dem angegebenen Vergleich einen leeren Resultset.
Denn kein datensatz kann die Bedingung "größer als Text '9.2015'" und gleichzeitig "kleiner als text '1.2016'" erfüllen.

Also, WENN du unbedingt ein künstliches Feld im View anlegen möchtest zu Forschungs- und Weiterbildungszwecken, dann ind der Art
Hier wird benutzt:
DateFromParts(2015, 9, 1) --> liefert einen Datumswert 01.09.2015
Convert( char(8), datumswert, 112) macht ein Datum zum String im Format YYYYMMTT


Aber ich finde den Nutzen dieses Zusatzfeldes eher gering.
ich würde direkt auf jahr und monat vergleichen.

Grüße
Biber
[Edit] Upps, BirdyB war schneller. [/Edit]
Bitte warten ..
Mitglied: BirdyB
23.03.2016 um 12:01 Uhr
Wo ist eigentlich jodels Beitrag geblieben?
@Biber: Hunger gehabt? ;-) face-wink
Bitte warten ..
Mitglied: Biber
23.03.2016 um 12:08 Uhr
[OT]
Moin BirdyB,

Zitat von @BirdyB:

Wo ist eigentlich jodels Beitrag geblieben?
@Biber: Hunger gehabt? ;-) face-wink
Ich war es nicht... war genauso verblüfft wie Du.
Wollte nämlich auch mal nachlesen, auf welchen Link er verwiesen hatte.

Hm, vielleicht taucht er ja unter dem Nick houdini32 wieder auf ganz plötzlich...

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: Bluejet
23.03.2016 um 13:18 Uhr
Vielen Dank erstmal für Eure Antworten!

Wie ich das so rauslese, ist mein Lösungswenig nicht so optimal.
Die Tabellen mit den Spalten 'Jahr' und 'Monat' sind so allerdings bereits im Einsatz, also muss ich damit leider irgendwie arbeiten.

Bezüglich DateFromParts werde ich jetzt noch einmal etwas nachlesen, das klingt insgesamt ganz interessant!

Um die Frage aber nochmal ganz vereinfacht zu stellen: gibt es die Möglichkeit, dass ich nur mit diesen Angaben den Zeitraum von 9.2015 bis 3.2016 abfrage?


Als Ansatz:

SELECT Rechnungsnummer, Monat, Jahr
WHERE


Wären es reine Datumsfelder, würde ich mir ja zu helfen wissen... aber dabei, diese zwei numeric-Felder hier zu kombinieren, wenn es um zwei unterschiedliche Jahre geht, zerbreche ich mir den Kopf...
Bitte warten ..
Mitglied: BirdyB
23.03.2016 um 13:30 Uhr
Hallo Bluejet,

mit DateFromParts() baust du dir ja ein Datumsfeld. Daher würde ich einfach die entsprechende View bauen und damit die Abfrage gestalten.
Alternativ
Zitat von @Bluejet:
SELECT Rechnungsnummer, Monat, Jahr
WHERE
(Monat > 9 AND Jahr =2015) OR (Monat < 3 AND Jahr = 2016)

wäre jetzt mal eine Idee (habs nicht getestet)

Beste Grüße!


Berthold
Bitte warten ..
Mitglied: Biber
LÖSUNG 23.03.2016, aktualisiert um 13:34 Uhr
Moin bluejet,

wo genau ist das Problem.
Wie würdest du denn diese Einschränkung im Umgangs-Deutsch formulieren?
[Raum für deine Notizen]


[/Raum für deine Notizen]

Im SQL, was sich ja nix anderes ist als stilisiertes Umgangsdenglisch läuft es exakt genauso:

Grüße
Biber
Bitte warten ..
Mitglied: BirdyB
23.03.2016 um 13:34 Uhr
@Biber hat recht. Vergiss meinen Vorschlag... (Ich leide noch unter den Nachwirkungen des Nachtdienstes...)
Bitte warten ..
Mitglied: Bluejet
23.03.2016 um 14:25 Uhr
Hi Biber,

genau das hat mir peinlicherweise gefehlt. Das Inklammernsetzen in Verbindung mit 'OR' führt genau zu dem Ergebnis, das ich brauche...
Vielen Dank. :) face-smile

Da habe ich echt VIEL zu kompliziert gedacht, das behalte ich mir in jedem Fall.


Danke nochmal an alle für die Unterstützung!
Bitte warten ..
Heiß diskutierte Inhalte
Festplatten, SSD, Raid
Festplatte aus defekten Notebook ausgebaut - wird nicht erkannt - Wie gelange ich an meine Daten?
gelöst 1nCoreVor 1 TagFrageFestplatten, SSD, Raid15 Kommentare

Hallo liebe Community, nach 7 Jahren hat mein XMG Notebook seinen Geist aufgegeben In dem Notebook waren zwei Festplatten verbaut (eine für System und ...

Erkennung und -Abwehr
Wie geschickt sich Malware verstecken kann - Ein Beispiel aus der Praxis eines Security Experts
colinardoVor 1 TagTippErkennung und -Abwehr5 Kommentare

Servus Kollegen und Mitstreiter, da ja in letzter Zeit die Exchange-Lücken die Admin-Landschaft ziemlich aufgewirbelt haben und dabei auch immer mal wieder "sogenannte" Admins ...

Exchange Server
Exchange Update CU19 auf CU20 Fehler - Eine weitere Version dieses Produkts ist bereits installiert
gelöst StefanKittelVor 1 TagFrageExchange Server6 Kommentare

Hallo, ich habe hier einen Exchange 2016 mit CU19 (15.1.2176.2). Darauf wollte ich nun CU20 installiert. Download Es erscheint Eine weitere Version dieses Produkts ...

Windows Server
Hat Microsoft die WindowsServerSicherung oder diskpart zerpatcht?
anteNopeVor 20 StundenFrageWindows Server3 Kommentare

Hallo, kann es eventuell sein, dass Microsoft mit seinen letzten Updates die WindowsServerSicherung bzw. diskpart zerschossen hat? Es häufen sich bei mir seit gestern ...

Windows 10
Windows 10 Updates im Abgesicherten Modus nicht möglich!
gelöst Yuuto.LucasVor 1 TagFrageWindows 1016 Kommentare

Hallo, ich habe aktuell ein Problem bei einem Kunden Rechner. Bei diesem gibt es Probleme mit dem Soundkarten Treiber hdaudio.inf wegen dem der PC ...

Windows 10
Lokales Profil wird beim Herunterfahren gelöscht!
Yuuto.LucasVor 1 TagFrageWindows 1012 Kommentare

Hallo, ich habe aktuell folgendes Problem. An einem Kundenrechner ist aktuell ein Lokales Profil eingerichtet (vorher ein Server Profil bei dem das gleiche Problem ...

Ubuntu
Cups-Server mit SMB lehnt Verbindungen ab (smb.conf)?
ErikHeinemannVor 10 StundenFrageUbuntu17 Kommentare

Guten Morgen, ich habe einen Ubuntu 20.04 Server mit Cups als Printspooler. Nun Soll noch Samba hinzugefügt werden für eine einfache Verwendung unter Windows. ...

Exchange Server
Kaspersky for Exchange Meldungen
gelöst wieoderwasVor 9 StundenFrageExchange Server11 Kommentare

Guten Morgen, wir haben bei uns einen Exchange 2013 mit Kaspersky for Exchange und Sophos auf Dateiebene. Heute Morgen habe ich einige von diesen ...