In Ordnung, noch einmal dann! Zuerst werden Sie feststellen, dass ich eine Temp-Tabelle anstelle einer Tabellenvariablen für das Beispiel erstellt habe, für die die Variable @tablecolumns erforderlich ist. Trifft nicht wirklich zu, aber es war eine Änderung, auf die ich geachtet habe, wenn Sie den Code kopieren/einfügen, um damit zu spielen.
@tablecolumns ist das dynamische Stück, das Sie benötigen, es erstellt einen Wert, der wie folgt aussieht: "[A], [B], [C] ...." für die Pivot-Tabelle.
Jetzt müssen Sie die Abfrage als Dynamic SQL ausführen, um Ihre @ Tablescolumns-Variable korrekt zu werfen. (Je nachdem, wie hoch die tatsächliche Abfrage bekommt können Sie entscheiden, die Abfrage selbst in einer Ansicht zu setzen und wählen Sie/verketten, was Sie aus der Sicht brauchen stattdessen finde ich dynamische SQL ein wenig seltsam so manchmal das ist einfacher)
create table #toystab (Toys nvarchar(1), Cost decimal (5,2), Sell decimal (5,2))
insert into #toystab values ('A', 5.50, 6.60)
insert into #toystab values ('B', 6.50, 7.60)
insert into #toystab values ('C', 7.50, 8.60)
insert into #toystab values ('D', 8.50, 9.60)
insert into #toystab values ('E', 11.50, 12.60)
insert into #toystab values ('F', 13.50, 14.60)
DECLARE @tablecolumns nvarchar(max)
select @tablecolumns = (COALESCE(@tablecolumns +',', '')
+ '[' + convert(nvarchar(10), #Toystab.Toys) +']')
from #toystab
declare @Query nvarchar(max)
set @Query = '
select *
from (
select Toys Toy1, Toys ToyName,
CONCAT(cast(Cost as varchar(10)), '','', cast(Sell as varchar(10))) as [ConcatenatedPrice]
from #toystab) Toyz
pivot
(
MAX(ConcatenatedPrice)
for Toy1 in (' + @tablecolumns+ ')
)
as [Pivot]
'
exec(@Query)
drop table #toystab
Beachten Sie ein paar Dinge. Erstens, dass ich die Toys-Spalte zweimal auswähle, einmal um zu drehen und einmal um eine Spalte zu sein. Zweitens, in der CONCAT-Anweisung ist das Trennzeichen '', '' kein Zitat (') es sind zwei Apostrophe (' '). Wenn Sie ein Zitat machen "," erhalten Sie einen ungültigen Spaltenfehler eine Erinnerung, stellen Sie sicher, Exec (@Query) enthält die Parens
Nicht die einfachste in SQL ... SQL ist Ihre Datenbeschaffungsebene, nicht so sehr Ihre Anzeigeebene. Einfachste Möglichkeit zu tun das ist Exportieren Sie Ihre Ergebnisse in Excel und lassen Sie sie drehen. Wenn Sie eine reine SQL-Antwort wünschen, kommt diese Frage ungefähr 10 Mal täglich hier auf ... Suchen Sie die Website nach einer Antwort. – Twelfth
Welche dbms ???????? – Eric
Microsoft SQL 2012 – Etex