Ich weiß, viele von Ihnen haben dieses Verhalten beobachtet, aber ich frage mich, ob jemand warum erklären kann. Wenn ich eine kleine Tabelle erstellen, die ein Beispiel für die Verwendung der Pivot-Funktion zu erstellen, ich die Ergebnisse erhalten, würde ich erwarten:Warum Pivot mit "extra" Spalten kombiniert keine Ergebnisse
CREATE TABLE dbo.AverageFishLength
(
Fishtype VARCHAR(50) ,
AvgLength DECIMAL(8, 2) ,
FishAge_Years INT
)
INSERT INTO dbo.AverageFishLength
(Fishtype, AvgLength, FishAge_Years)
VALUES ('Muskie', 32.75, 3),
('Muskie', 37.5, 4),
('Muskie', 39.75, 5),
('Walleye', 16.5, 3),
('Walleye', 18.25, 4),
('Walleye', 20.0, 5),
('Northern Pike', 20.75, 3),
('Northern Pike', 23.25, 4),
('Northern Pike', 26.0, 5);
Hier ist die Abfrage Dreh:
SELECT Fishtype ,
[3] AS [3 Years Old] ,
[4] AS [4 Years Old] ,
[5] AS [5 Years Old]
FROM dbo.AverageFishLength PIVOT(SUM(AvgLength)
FOR FishAge_Years IN ([3], [4], [5])) AS PivotTbl
Hier sind die Ergebnisse:
Allerdings, wenn ich die Tabelle mit einer Identitätsspalte erstellen, erhalten die Ergebnisse in getrennte Linien getrennt:
DROP TABLE dbo.AverageFishLength
CREATE TABLE dbo.AverageFishLength
(
ID INT IDENTITY(1,1) ,
Fishtype VARCHAR(50) ,
AvgLength DECIMAL(8, 2) ,
FishAge_Years INT
)
INSERT INTO dbo.AverageFishLength
(Fishtype, AvgLength, FishAge_Years)
VALUES ('Muskie', 32.75, 3),
('Muskie', 37.5, 4),
('Muskie', 39.75, 5),
('Walleye', 16.5, 3),
('Walleye', 18.25, 4),
('Walleye', 20.0, 5),
('Northern Pike', 20.75, 3),
('Northern Pike', 23.25, 4),
('Northern Pike', 26.0, 5);
Gleiche genaue Abfrage:
SELECT Fishtype ,
[3] AS [3 Years Old] ,
[4] AS [4 Years Old] ,
[5] AS [5 Years Old]
FROM dbo.AverageFishLength PIVOT(SUM(AvgLength)
FOR FishAge_Years IN ([3], [4], [5])) AS PivotTbl
Unterschiedliche Ergebnisse:
Es erscheint mir, dass die ID-Spalte verwendet wird, in der Abfrage ist, auch wenn es nicht erscheint in der Abfrage überhaupt. Es ist fast so, als wäre es implizit in der Abfrage enthalten, aber nicht in der Ergebnismenge.
Kann jemand erklären, warum dies geschieht?
Ich sollte hinzufügen, dass ich weiß, wie ich es umgehen kann, mit einer Unterabfrage oder row_number über ... Ich bin wirklich nur daran interessiert, warum es passiert ist. –
Diese Frage hat mich hungrig gemacht – billinkc