Mehr aggregatfunctionen in Pivot Transact SQL

13/03/2008 - 12:35 von Martin Wendel | Report spam
Hallo alle,

habe folgende Abfrage
SELECT SFVRAN AS USERNAME ,CAST([200801] AS NVARCHAR(10)) + ' €' AS
[2008-01] FROM
(SELECT SFSFNR, SFVRAN, SUBSTRING(CAST(SFANDA as nvarchar(8)),1,6) AS
ANDA, SFKOLS FROM T_LWSF
WHERE SFKOLS > 0 AND SUBSTRING(CAST(SFANDA as nvarchar(8)),1,6) >= 200801
AND SUBSTRING(CAST(SFANDA as nvarchar(8)),1,6) <= 200812
) AS SourceTable
PIVOT
(
SUM(SFKOLS)
FOR ANDA IN ([200801])) AS PivotTable
ORDER BY SFVRAN


nun würde ich aber gerne nicht nur
SUM(SFKOLS)
ausgeben, sondern auch
COUNT(SFKOLS)

ich finde aber keine Hilfe bezüglich mehrerer Aggr. und in den Newsgroups
auch kein wirkliches Beispiel hierfür, jeder benutzt immer nur eines :-(

Geht das, und weis jemand wie das gehen könnte?
Also mit , getrennt hintereinander schreiben geht nicht :-( (wàre ja auch zu
einfach gewesen)

thx
Martin Wendel
 

Lesen sie die antworten

#1 Christoph Muthmann
13/03/2008 - 13:31 | Warnen spam
Martin Wendel wrote:
Hallo alle,

habe folgende Abfrage
[snip]
nun würde ich aber gerne nicht nur
SUM(SFKOLS)
ausgeben, sondern auch
COUNT(SFKOLS)
[snip]



Hallo Martin,
PIVOT bietet meiner Meinung nach diese Funktionalitàt nur für eine
Spalte. Siehe hierzu auch:
http://msdn2.microsoft.com/de-de/li...158aac1d66(sql.90).aspx
Verwenden von PIVOT und UNPIVOT

<Zitat>Verwenden Sie die relationalen Operatoren PIVOT und UNPIVOT, um
einen Tabellenwertausdruck in eine andere Tabelle zu àndern.
</Zitat>
Ich denke, die meinen das mit "einen Tabellenwertausdruck" genau so!
Auch ist weiter unten in der Beschreibung der Syntax keine Liste
vorgesehen.


Du könntest aber die beiden PIVOTs joinen.

Set Nocount on

go
CREATE TABLE #p
( Year SMALLINT,
Quarter TINYINT,
Amount DECIMAL(2,1) )
GO
INSERT INTO #p VALUES (1990, 1, 1.1)
INSERT INTO #p VALUES (1990, 2, 1.2)
INSERT INTO #p VALUES (1990, 3, 1.3)
INSERT INTO #p VALUES (1990, 4, 1.4)
INSERT INTO #p VALUES (1991, 1, 2.1)
INSERT INTO #p VALUES (1991, 2, 2.2)
INSERT INTO #p VALUES (1991, 3, 2.3)
INSERT INTO #p VALUES (1991, 4, 2.4)
GO

select a.year, a.[1], a.[2], a.[3], a.[4], b.[1], b.[2], b.[3], b.[4]
from
(SELECT * FROM #p
PIVOT (sum(Amount) FOR Quarter IN ( [1],[2],[3],[4] )) as x) a,
(SELECT * FROM #p
PIVOT (count(Amount) FOR Quarter IN ( [1],[2],[3],[4] )) as y) b
where a.year = b.year
GO

select a.year, a.Q1, a.Q2, a.Q3, a.Q4, b.Count_Q1, b.Count_Q2,
b.Count_Q3, b.Count_Q4
from
(SELECT year, [1] AS Q1,[2] AS Q2,[3] AS Q3, [4] AS Q4
FROM
(SELECT * FROM #p) AS #p
PIVOT (sum(#p.Amount) FOR #p.Quarter IN ( [1],[2],[3],[4] )
) AS x) a,
(SELECT year, [1] AS Count_Q1,[2] AS Count_Q2,[3] AS Count_Q3, [4] AS
Count_Q4
FROM
(SELECT * FROM #p) AS #p
PIVOT (count(#p.Amount) FOR #p.Quarter IN ( [1],[2],[3],[4] )
) AS x) b
where a.year = b.year


go
drop Table #p

Einen schönen Tag noch,
Christoph
(Please post ALL replies to the newsgroup only unless indicated
otherwise)

Ähnliche fragen