Pivot Abfrage von Access nach SQL Server

Babsi

SQL-Guru
Beiträge
122
Guten Morgen,

ich habe folgende Pivotabfrage von Access
TRANSFORM MIN(abf_AssetGP_Matrix_Gesamtliste.Asset_SBA) AS SBA_Werte
SELECT abf_AssetGP_Matrix_Gesamtliste.GP_Bezeichnung
FROM abf_AssetGP_Matrix_Gesamtliste
GROUP BY abf_AssetGP_Matrix_Gesamtliste.GP_Bezeichnung
PIVOT (abf_AssetGP_Matrix_Gesamtliste.id_Asset);
Auf dem SQL Server angelegt:
SELECT * From
(
SELECT GP_Bezeichnung as GP_Bezeichnung,id_Asset as MyNumber , Asset_SBA as SBA_Werte
FROM abf_AssetGP_Matrix_Gesamtliste
GROUP BY id_Asset,Asset_SBA,GP_Bezeichnung

) AS Test
PIVOT
( MIN(SBA_Werte)
FOR MyNumber
in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31],[32],[33],[34],[35],[36],[37],[38],[39])
) AS Pivotabf_AssetGP_Matrix_Gesamtliste
ORDER BY GP_Bezeichnung;
Ich habe die Werte die, in in aufgelistet sind nun star angegeben, aber eigentlich sollte es die id_Asset bzw. Alias MyNumber.
Aber wenn ich die angebe , in der Form in(MyNumber)da bekomme ich:
Der Spaltenname "MyNumber", der im PIVOT-Operator angegeben ist, steht mit dem vorhandenen Spaltennamen im PIVOT-Argument in Konflikt.
Auch mit einem Select Statement habe ich es versucht, was mach ich denn da falsch.
 
Werbung:
Ich kann PIVOT nicht ausstehen, tue mich da immer schwer mit. Wenn ich das richtig in Erinnerung habe kann im IN Teil nur eine starre Werteliste angegeben werden, kein Spaltenname oder ähnliches. Das ginge nur wenn man das ganze PIVOT dynamisch zusammen setzt, hier mal ein Beispiel:
 
Hallo Ukulele,

Ich kann PIVOT nicht ausstehen
ja, ich auch nicht😁

Ich muss das hier erst mal so übernehmen und später versuchen das Umzubauen. Ich versteh die ganze Anwednung ja noch nicht mal genau :-(
Irgendwas mit KPI.
Genau die Seite habe ich auch, gefunden und abgespeichert. Danke👍👍.
Ich lass das dann mal so, und später wird besprochen was man da anders, besser , wie auch immer machen kann.

Hab Dank, Gruß Babsi
 
Es muss auf jeden Fall mit dynamischem SQL gemacht werden, denkbar wäre eine Prozedur die eine Tabelle zurück liefert. Dann kann man es gut als Abfrage in Querys verwenden.
 
Werbung:
Hallo, ich habe im Netz viel gefunden.
Hier nun mein Eregebnis, funktioniert super.

USE [EWE_Risikomanagement]
GO
/****** Object: StoredProcedure [dbo].[AssetGpMatrix] Script Date: 19.05.2022 12:01:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[AssetGpMatrix]


AS
BEGIN


DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.id_Asset)
FROM abf_AssetGP_Matrix_Gesamtliste c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT * from
(
Select GP_Bezeichnung AS GP_Bezeichnung, id_Asset AS MyNumber, Asset_SBA AS SBA_Werte
from abf_AssetGP_Matrix_Gesamtliste
) x
pivot
(
MIN(SBA_Werte)
for MyNumber in (' + @cols + ')
) p '


execute(@query)

end
Quellen u.A.: -
- SQL Server PIVOT Operator Explained Clearly By Practical Examples
- SQL Server PIVOT Operator Explained Clearly By Practical Examples

Gruß, Babsi
 
Zurück
Oben