Konvertieren von Zeilen in Spalten in einer Sql-Abfrage
Ich habe harte Zeit, herauszufinden, diese bitte mir helfen
Ich habe mal in/aus sql-Abfrage
Ich habe eine Tabelle sieht wie folgt aus. es gibt vier Spalten zeigt die Zeit in/out info wie...
Date Day Day TimeStamp CheckType
10/11/2014 Sat 8:30 am in
10/11/2014 Sat 11:30am out
10/11/2014 Sat 1:30pm in
10/11/2014 Sat out
10/12/2014 Sun 9:00am in
10/12/2014 Sun 11:20pm out
10/12/2014 Sun 5:20pm out
10/13/2014 Mon 8:00am in
10/13/2014 Mon 6:10pm in
also wer checkin oder checkout, dann wird der Datensatz-Anzeige das Ergebnis in Ordnung und wenn jemand soll, heraus zu überprüfen, aber versehentlich gedrückt Schaltfläche, dann wird das display wie es ist (in), oder wenn jemand vergessen, dass Sie dann, dass der Raum zeigt leere
Ich versuche konvertieren von Zeilen in Spalten-und Darstellung dieser Informationen in unten
Date Day Time Type Time Type Time Type Time Type etc-----
10/11/2014 Sat 8:30am in 11:30am out 1:30pm in
10/12/2014 Sun 9:00am in 11:20am out 1:20pm in 6:20pm in
10/13/2014 Mon 8:00am in 6:10pm out
10/14/2014 Tus 8:20am in
etc
Habe ich versucht, pivot -
select Date, Day, [1],[2],[3],[4],[5],[6],[7],[8],[9],[10] etc---
from
(
select Date, Day, Stamptime, CheckTime, userID
from a table
)
pivot
(
max(StampTime)
for stamptime in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10] etc---)
) as PivotTable
kann mir jemand erklären, wie konvertieren von Zeilen in Spalten ich habe verbrachte viele Tage schon.
- SQL Fiddle: sqlfiddle.com/#!6/0174d (mit ein paar Optimierungen, die auf der original-Tabelle)
- Sie können das nicht (in der Datenbank, in der UI ist OK). Das Problem ist an einem Tag können Sie haben 1 check-in, am nächsten Tag haben Sie möglicherweise 2 check-ins und 1 check-out. Das bedeutet, dass die Anzahl der erforderlichen Spalten für den ersten Tag ist anders, um die erforderliche Anzahl für die zweite. Es bedeutet auch, Sie nicht wissen, die maximale Anzahl der Spalten, die Sie benötigen. Sie können in der Lage sein zu umgehen, indem man die Ausgabe in XML anstelle von Daten der Tabelle, aber wirklich, ich glaube, du bist die Schaffung Schmerz für dich / sollten überdenken Ihre Herangehensweise an das problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist etwas in der Nähe, was Sie nach, machen Verwendung von XML, um die variable Anzahl der Spalten. Wie bereits in meinem Kommentar oben, aber ich weiß nicht empfehlen diese Vorgehensweise.
SQL Fiddle: http://sqlfiddle.com/#!3/e5b325/2
Ausgabe:
Alternativ, wenn Sie eine Garantie haben Sie nie mehr als eine bestimmte Anzahl von check-ins/- outs pro Tag, könnten Sie Folgendes tun (dies nimmt nicht mehr als 5 pro Tag):
SQL Fiddle: http://sqlfiddle.com/#!3/e5b325/4
Ausgabe:
...Oder wollten Sie dynamisches SQL verwenden, Sie könnten dies tun:
SQL Fiddle: http://sqlfiddle.com/#!3/e5b325/6
Ausgabe:
@DomainId
erwähnt ist nicht in meinem Skript; also ich nehme an, Sie haben geändert, das Skript und setzen den Wert dort irgendwo. Entweder müssen Sie eine declare-Anweisung (so etwas wiedeclare @DomainId bigint = 123
), oder man deklariert eine variable und dann versucht haben, es zu benutzen, die in der dynamischen SQL; in diesem Fall müssen Sie einen Blick insp_executesql
(stattexec
) es als parameter übergeben; msdn.microsoft.com/en-gb/library/ms188001.aspx. Suche oder Frage als eine neue Frage auf, SO mit dem code, wenn man auf Fragen gibt.