Kreuztabellenabfrage dynamisch erstellen

07/08/2008 - 08:15 von Andreas Jändl | Report spam
Hallo NG,

ich möchte eine Kreuztabelle in einem SQL2k mit A2k-adp verwenden. Bisher
habe ich das folgendermassen gemacht:

SELECT
Stationsname,
sum(Case IdWarengruppe WHEN 2 THEN Umsatz ELSE 0 END) AS Warengruppe2
sum(Case IdWarengruppe WHEN 3 THEN Umsatz ELSE 0 END) AS Warengruppe3
FROM usw

Das kann ich aber nur machen, wenn ich die Anzahl und Namen der
darzustellenden Spalten kenne. Gibt es eine Möglichkeit, die Kreuztabelle zu
erstellen, ohne Anzahl und Wert der Spalten zu kennen?

Wenn es da keine einfache Möglichkeit gibt, würde ich im VBA den SQL-String
basteln, indem ich zuerst die IDWarengruppen durchlaufe und jede
IdWarengruppe in einen CASE-Ausdruck in den SQL-String schreibe. Danach
könnte ich eine vorhandene SP öffnen, den neuen SQL-String einfügen, die SP
speichern und das daran gebundene Formular öffnen.
Ist diese Vorgehensweise sinnvoll?
Und wie kann ich mit VBA eine SP öffnen, den SQL-String àndern und wieder
speichern? Und alles so, dass die adp das mitbekommt?

Vielen Dank im voraus und herzliche Grüße,
Andreas
 

Lesen sie die antworten

#1 Christa Kurschat
07/08/2008 - 09:59 | Warnen spam
Hallo Andreas,

Andreas Jàndl schrieb:

Hallo NG,

ich möchte eine Kreuztabelle in einem SQL2k mit A2k-adp
verwenden. Bisher habe ich das folgendermassen gemacht:

SELECT
Stationsname,
sum(Case IdWarengruppe WHEN 2 THEN Umsatz ELSE 0 END) AS
Warengruppe2 sum(Case IdWarengruppe WHEN 3 THEN Umsatz ELSE 0
END) AS Warengruppe3 FROM usw

Das kann ich aber nur machen, wenn ich die Anzahl und Namen der
darzustellenden Spalten kenne. Gibt es eine Möglichkeit, die
Kreuztabelle zu erstellen, ohne Anzahl und Wert der Spalten zu
kennen?
Wenn es da keine einfache Möglichkeit gibt, würde ich im VBA
den SQL-String basteln, indem ich zuerst die IDWarengruppen
durchlaufe und jede IdWarengruppe in einen CASE-Ausdruck in
den SQL-String schreibe. Danach könnte ich eine vorhandene SP
öffnen, den neuen SQL-String einfügen, die SP speichern und
das daran gebundene Formular öffnen. Ist diese Vorgehensweise
sinnvoll? Und wie kann ich mit VBA eine SP öffnen, den
SQL-String àndern und wieder speichern? Und alles so, dass die
adp das mitbekommt?



Dyn. SQL wàre hier die Lösung.
Hier mal ein Beispiel von mir:
ALTER proc [dbo].[p_XTabArtikelBruecken] as
/***************************************************************************************************************************
* Zweck: erstellt eine Tabelle mit ArtikelBruecken als Kreuztabelle
*
* Bearbeiter Datum Erstellung/Änderung
* Christa Kurschat 03.11.2004 E
*****************************************************************************************************************************/
set nocount on
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[T_XTabArtikelBruecken]') and OBJECTPROPERTY(id,
N'IsUserTable') = 1)
drop table [dbo].[T_XTabArtikelBruecken]

declare @sql varchar(4000)
declare @spaltenname varchar(50)

set @sql 'SELECT Mandant,
Filiale,
Artikelnr,
max(GueltigAb) as GueltigAb'
declare spalten cursor for select Kurzbez from dbo.v_Artikelbrueckenart
group by Kurzbez

open spalten

fetch next from spalten into @spaltenname

while @@fetch_status = 0
begin

set @sql = @sql + ', max(case Kurzbez when ''' + @spaltenname + ''' then
ArtikelBruecke else NULL end) as [' + @spaltenname + ']'
fetch next from spalten into @spaltenname

end

close spalten

deallocate spalten

set @sql = @sql + ' into T_XTabArtikelBruecken FROM
v_ArtikelBrueckeMitKurzBez

GROUP BY Mandant,Filiale, Artikelnr'


exec(@sql)

Hier kann die Anzahl der Spalten auch variieren.

Gruß
Christa
Access-FAQ: http://www.donkarl.com
SQL-Server-FAQ: www.sqlfaq.de
InsideSql: www.insidesql.org

Ähnliche fragen