![]() |
Datenbank: SQL Server • Version: 2008 • Zugriff über: TADOQuery
Brauche hilfe bei SQL-Statement
Hallo,
ich habe vereinfachend eine Tabelle (Results) in der Namen (eigntl. IDs) von Programmen und die von den Programmen erzeugten Ergebnisdateien gespeichert sind. Mir geht es nun darum herauszufinden, welche Arten von Datei erzeugt werden. Dazu schneide ich einfach die Endung raus und habe z.B. folgende Tabelle:
Code:
Darauf ein Distinct:
P_ID Dateiendung
1111 PDF 1111 PDF 1111 XLS 1111 DOC 1111 DOC 1234 XLS 1234 XLS 2233 XLS 2233 DOC
Code:
Was ich nun haben möchte:
P_ID Dateiendung
1111 PDF 1111 XLS 1111 DOC 1234 XLS 2233 XLS 2233 DOC
Code:
Dieser letzte Schritt ist das Problem, wie kriege ich das hin (mit SQL).
P_ID Dateiendungen
1111 PDF, XLS, DOC 1234 XLS 2233 XLS, DOC Falls der Dialekt wichtig ist, ausnahmsweise mal nicht Oracle sondern SQLServer. |
AW: Brauche hilfe bei SQL-Statement
Schau einmal hier:
![]() |
AW: Brauche hilfe bei SQL-Statement
Ich nutze für solche Sachen eine Function (oracle)
Gruß K-H |
AW: Brauche hilfe bei SQL-Statement
Ich würde den
![]() |
AW: Brauche hilfe bei SQL-Statement
Oder zu MySQL wechseln und einfach GROUP_CONCAT benutzen :stupid:
|
AW: Brauche hilfe bei SQL-Statement
Oder zu FireBird (List())
|
AW: Brauche hilfe bei SQL-Statement
Da ich auf die DB keinen Einfluss habe schau ich mir die anderen Varianten mal näher an.....morgen, denn es ist Feierabend! Danke euch.
|
AW: Brauche hilfe bei SQL-Statement
Hat sich leider herausgestellt, dass mein Chefe sich vertan hat und die Daten doch von einer Oracle DB kommen. Dank des Stichwortes Group_Concat aus euren Links bin ich dann auf vergleichbares für Oracle gestoßen. Hab beide im folgenden Link vorgstellten Verfahren ausprobiert und beide funktionieren. Die XML-Variante kommt mir auch schneller vor.
![]() Ich würde das Ergebnis ja hier posten, aber das SQL-Statement ist megaunübersichtlich geworden, da ich die vorgestellten Verfahren nicht auf eine Tabelle anwende, sondern auf einen üblen Subselect, und das will ich keinem antun. Danke nochmal für die Links, die mir gezeigt haben, wonach ich eingentlich suche:thumb: |
AW: Brauche hilfe bei SQL-Statement
Zitat:
Gruß K-H |
AW: Brauche hilfe bei SQL-Statement
Thema View! Werd ich wahrsch. auch machen, damit das SQL-Statement in dem Programm, wo ich es brauche nicht so chaotisch ist.
Hätte das auch performance Vorteile? Ist eine View schneller als eine Abfrage? Ist eine View letztlich nicht auch nur ein gespeichertes SQL-Statement, das bei Selects auf die View ausgeführt wird. |
AW: Brauche hilfe bei SQL-Statement
Zitat:
Edit: Blödsinn entfernt... |
AW: Brauche hilfe bei SQL-Statement
Ja, ein View ist zunächst nur gespeichertes SQL.
Ein View ist aber auch ein gespeicherter Zusammenhang zwischen Objekten. Der kann z.B. zerstört werden durch DML und man bekommt es angezeigt (als Admin, wenn ein View betroffen ist), die Zusammenhänge und die Fehler durch Abhängigkeit. Der View kann ein Interface darstellen und und und .. und er kann angenehm aussehen, wie eine Tabelle. (das kann aber auch irritieren) :) Zum eigentlichen Thema, statisch kann man in Oracle je nach Version sicher mit XML Funktion oder mit Pivot arbeiten. Dynamisch empfiehlt sich seit einigen Versionen die Funktion rowtocol. z.B. so ![]() ![]() |
AW: Brauche hilfe bei SQL-Statement
Zitat:
2. rowtocol muss ich aber zuvor als Datenbakfunktion anlegen, oder? Und danke für die Links, da gibt es ja noch zig Möglichkeiten, wie man das machen kann. P.S.: Ein Nachteil einer View (und auch einer Datenbankfunktion) ist mir gerade eingefallen. Wenn irgendein aufräumwütiger Admin da drüber stolpert und denkt "Hat der Azubi gemacht? schon vor 2 Monaten? Braucht keiner - Weg damit", läuft auf einmal das Programm nicht mehr.:-D |
AW: Brauche hilfe bei SQL-Statement
Zitat:
Code:
8 ;
,rowtocol('select tableevent.Eventcode * ERROR at line 2: ORA-00904: "ROWTOCOL": invalid identifier |
AW: Brauche hilfe bei SQL-Statement
rowtocol muss als Funktion - so wie in dem Link aufgeführt- eingespielt werden. Wahlweise ginge es auch als Package Funktion.
Es gibt glaub ich verschiedene Varianten davon, Orginial stammt aus Ask Tom. Die Funktion lässt sich "dynamisch" verwenden, das Select wird ja als String-Parameter mitgegeben. Das ist natürlich bequem, hat aber den Nachteil, dass man keine bind variables nutzen kann. Die Pivot Variante ist "statisch", du musst ein festes SQL angeben. In einem Client, kannst Du das natürlich auch beliebig zusammensetzten (und mit bind variables bestücken) in einem View ist es statisch. Das ist aber ja nicht ungewöhnlich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz