/ Wie werden Zeilen in SQL Server-Spalten transponiert? - SQL-Server, Pivot

Wie Transponieren von Zeilen in Spalten in SQL Server? - SQL-Server, Pivot

Ich habe daran gearbeitet, diesen Tisch zu transponieren oder zu drehen, aber nachdem ich so viele Stunden gearbeitet habe, bleibe ich immer noch dabei. Kannst du mir bitte helfen?

Mein Tisch sieht so aus:

CREATE TABLE Table1
(
`Time` datetime,
`IN` int,
`OUT` int
);

INSERT INTO Table1 (`Time`, `IN`, `OUT`)
VALUES ("2017-04-05 15:53:00", 40, "35"),
("2017-04-05 15:24:00", 40, "35"),
("2017-04-05 15:23:00", 40, "35"),
("2017-04-05 14:22:00", 42, "40"),
("2017-04-05 14:21:00", 42, "40"),
("2017-04-05 14:20:00", 42, "40"),
("2017-04-05 13:19:00", 33, "30"),
("2017-04-05 13:18:00", 33, "30"),
("2017-04-05 13:17:00", 33, "30"),
("2017-04-05 13:16:00", 33, "30"),
("2017-04-05 13:15:00", 33, "30"),
("2017-04-05 12:14:00", 29, "25"),
("2017-04-05 12:13:00", 29, "25"),
("2017-04-05 12:12:00", 29, "25"),
("2017-04-05 12:11:00", 29, "25"),
("2017-04-05 11:14:00", 35, "33"),
("2017-04-05 11:13:00", 35, "33"),
("2017-04-05 11:12:00", 35, "33"),
("2017-04-05 11:11:00", 35, "33");

Ich möchte, dass meine Ausgabe so ähnlich ist

Bildbeschreibung hier eingeben

Der Wert in der "IN" -Spalte ist immer dieselbe für die bestimmte Stunde, auch wenn sie mehrere Male eingegeben wurde. Daher muss ich nur einen Wert in meiner Tabelle haben, der mit dem Wert in der "OUT" -Spalte übereinstimmt

Das Accum Ist die akkumulierte Summe für jede Stunde, mach es einfach optional, wenn es überhaupt möglich ist.

Ich mache den ersten Teil, der die 2 Spalten mit dieser Abfrage transponieren soll

SELECT
"IN" AS A, [2017-04-05 15:53:00], [2017-04-05 14:22:00],,,,
FROM
(SELECT
[Time], [in], [out]
FROM
Table1) AS SourceTable
PIVOT
(MAX([IN])
FOR [time] IN ([2017-04-05 15:53:00], [2017-04-05 14:22:00],,,,)) AS PivotTable;

Antworten:

2 für die Antwort № 1

Du kannst es versuchen,

select [Type], [11], [12], [13], [14], [15]
from
(
Select [Time], [Type], value
from (
select t2.*, sum([OUT]) over (order by [TIME]) as ACCUM
from (Select Distinct DATEPART(HOUR, Time) as [Time], [IN], [OUT] from table1) t2
) A
unpivot
(
value for [TYPE] in ([IN],[OUT],[ACCUM])
) unpiv
) src
pivot
(
sum(value)
for [Time] in ([11], [12], [13], [14], [15])
) piv

Holen Sie sich mehr Details von hier, um es dynamisch zu machen, Einfache Möglichkeit, Spalten und Zeilen in Sql zu transponieren? Akkumulieren Sie eine zusammengefasste Spalte