SQL Aus Zeilen Spalten machen

davidbaumann

Commodore
Dabei seit
Aug. 2004
Beiträge
4.864
Hallo,

folgende Tabelle (vereinfacht):
Code:
Idx    LogBookIdx   SeqNo   ParameterName      ParameterValue        
------ ------------ ------- ------------------ --------------------------------
2      1            10      OrderId            0001000000_3_3
3      1            20      RcpId              00001
4      1            30      BatchNo            B111111111
5      1            40      DispensingPhase    Disp.Phase 1
6      1            50      IngId              Wasser
7      1            60      IngName            Wasser
8      1            70      LotId              ********************
9      1            80      Quantity           50
Am Design gibt es nichts zu rütteln. Es gibt so ca 20 Verschiedene Typen, für jeden muss ich eine View erstellen.

Jetzt möchte ich dass es so zurückkommt:

Code:
LogBookIdx        OrderId            RcpId    batchNo        DispensingPhase    IngId    IngName    LotId                    Quantity
                0001000000_3_3    00001    B111111111    Disp.Phase 1    Wasser    Wasser    ********************    50
Habe schon mit Pivot rumprobiert aber ich komme gerade einfach nicht weiter...
Ach ja, auch ein CASE Zusammengebastel scheidet aus ;) Und wer mit nem Cursor kommt, der bekommt eine drauf ;)

Gruß,
David.

Edit: Es geht um einen Microsoft SQL Server 2008.
 
Zuletzt bearbeitet:

tRITON

Lieutenant
Dabei seit
Mai 2010
Beiträge
715
Hast du immer eine gleiche Anzahl von parametern oder unterschiedliche viele?

Meine Idee wäre es sonst die "parameter" in Variablen zu laden und diese dann als Select @a, @b usw auslesen zu lassen. Das ganze dann in einer SP ausführen lassen fertig, wenn du verstehst, was ich meine
 

Zeroflow

Lt. Commander
Dabei seit
Juli 2006
Beiträge
1.868
mhm vl. n php prog dass du einmal aufrufen musst, dass dir eben die daten holt , und dann in eine neue tabelle schreibt?

SQL Query für LogBookIdx
für jedes Element was kommt -> $array[$query["ParameterName"]] = $query["ParameterValue"];
insert into -> $array["OrderId"], $array["RcpId"], ....

$array[] is dein übergabe-array damit du die mehreren rows in einer unter bringst
$query ist dann natürlich das ergebnis der query

damit sollten deine daten dort so landen wies sein sollte

EDITH 2: das ************* solltest du durch NULL ersetzten falls du darauf zugrif hast
 
Zuletzt bearbeitet:

Rossibaer

Lieutenant
Dabei seit
Apr. 2007
Beiträge
735
Hab ich das jetzt überlesen oder hast du wirklich nicht geschrieben, welches DBMS zum Einsatz kommt?

20 verschiedene Typen = 20 verschiedene Parameter = 20 verschiedene Spalten?

Im Crosstab dann mehrere Zeilen?
 

Zeroflow

Lt. Commander
Dabei seit
Juli 2006
Beiträge
1.868
naja im Thread-Titel steht was von [SQL] als wird SQL oder mySQL zur anwendung kommen...
 

Rossibaer

Lieutenant
Dabei seit
Apr. 2007
Beiträge
735
oder Oracle oder MS SQLServer oder Informix oder Sybase oder SQLBase ??? Man! SQL steht für Structured Query Language und nicht für ein einzelnes Produkt! Es gibt erhebliche Unterschiede bei den DBMS. Und entsprechend wäre es hilfreich die genaue Zielplattform zu kennen.
 

davidbaumann

Commodore
Ersteller dieses Themas
Dabei seit
Aug. 2004
Beiträge
4.864
Hab leider vergessen, um welchen es sich handelt.
Ist ein Microsoft SQL Server 2008.

Ein PHP Prog scheidet aus, die Möglichkeit das in Variablen zu laden, kenn ich, ist mir aber auch nicht so recht.
Bekomme das mit Pivot irgendwie nicht hin, bin zu blöd dafür oder es ist nicht das was ich brauche...
Mein Problem ist dass es etwas braucht das agggregatisiert wird, ich aber nichts habe...

Gruß,
David.
 

Rossibaer

Lieutenant
Dabei seit
Apr. 2007
Beiträge
735
Muss dir beistimmen, mit Pivot bei SQLServer habe ich ebenfalls massive Probleme, wenn ich das Ganze schön generisch haben will. Ist halt jedesmal speziell auf die entsprechende Tabelle zugeschnitten gewesen und lies sich später für mich recht schwer erweitern oder ändern.

Am Ende lief es auf eine der folgenden 2 möglichen Lösungen:
1. T-SQL Stored Procedure oder Table Funktion geschrieben, Parameter bestimmen welche Tabelle, Spalten, Sortierung, intern liefs über temporäre Tabellen
2. flaches Select der Rohdaten und die Präsentation in der Applikation gelöst

Jedenfalls musste ich höllisch aufpassen, das ich keinen Performancekiller produzierte.
 

davidbaumann

Commodore
Ersteller dieses Themas
Dabei seit
Aug. 2004
Beiträge
4.864
Code:
year=q.year,
SUM(CASE quarter WHEN 1 THEN amount ELSE 0 END) as Q1,
SUM(CASE quarter WHEN 2 THEN amount ELSE 0 END) as Q2,
SUM(CASE quarter WHEN 3 THEN amount ELSE 0 END) as Q3,
SUM(CASE quarter WHEN 4 THEN amount ELSE 0 END) as Q4
FROM qtrsales q
GROUP BY year
Werde es jetzt so machen.
MAX() geht auch mit einem VarChar, also kann ich WHEN 'ORDERID' THEN Value ELSE '' END machen.

Gruß.
 

davidbaumann

Commodore
Ersteller dieses Themas
Dabei seit
Aug. 2004
Beiträge
4.864
Hallo,

habe es jetzt einfach durch ein Subselect gelöst.
Da der SQL Server recht schlau ist, optimiert er das schon von alleine zurcht... Wenn es langsam werden sollte, wenn mehr Daten in der Tabelle sind, muss ich eventuell einen Index erstellen.

Gruß.
 
Top