Announcement

Collapse
No announcement yet.

Tabellenstruktur

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabellenstruktur

    Hallo zusammen,
    ich habe mir von
    http://www.codeproject.com/Articles/...Column-and-Row
    die nachfolgende Abfrage umgeschrieben. Dies Funtioniert.
    Wenn ich aber in der Spalte 2(=Sektion) den Wert 2 auch in der dritten Zeile eingebe, bekomme ich die Meldung:"Meldung 8156, Ebene 16, Status 1, Zeile 13
    Die '4'-Spalte wurde für 'B' mehrmals angegeben."
    Andereseits funktioniert aber:
    Code:
    
    
    INSERT INTO tbl_Test
    VALUES
    ('A', 1, 5.55),
    ('B', 2, 15.45),
    ('C', 2, 5),
    ('C', 4, 5),
    ('A', 5, 0.45);
    GO
    SELECT [1],[2] FROM (SELECT Team,Sektion,Anzahl FROM tbl_Test) as s
    Pivot(Sum (Anzahl) FOR Sektion IN([1],[2]) ) as p

    Kann mich jemand aufklären oder sagen,was ich ändern muss
    Danke
    Code:
    USE Tester 
    GO 
    CREATE Table tbl_Test
    (
      Team VARCHAR(20),
      Sektion  float,
      Anzahl float
    )
    INSERT INTO tbl_Test 
    VALUES 
    ('A', 1, 5.55),
    ('B', 2, 15.45),
    ('C', 3, 5),
    ('C', 4, 5),
    ('A', 5, 0.45);
    GO
    
    
    /* COLUMNS HEADERS */
    DECLARE @columnHeaders NVARCHAR (MAX)
    SELECT @columnHeaders  = COALESCE (@columnHeaders + ',[' +CAST (Sektion AS VARCHAR)+ ']', '[' + CAST (Sektion AS VARCHAR) + ']')
    FROM    tbl_Test ORDER BY Sektion 
    
    /* GRAND TOTAL COLUMN */
    DECLARE @GrandTotalCol	NVARCHAR (MAX)
    SELECT @GrandTotalCol = COALESCE (@GrandTotalCol + 'ISNULL ([' + CAST (Sektion AS VARCHAR) +'],0) + ', 'ISNULL([' + CAST(Sektion AS VARCHAR)+ '],0) + ')
    FROM	tbl_Test ORDER BY Sektion
    
    SET @GrandTotalCol = LEFT (@GrandTotalCol, LEN (@GrandTotalCol)-1)
    
    /* GRAND TOTAL ROW */
    DECLARE @GrandTotalRow	NVARCHAR(MAX)
    SELECT @GrandTotalRow = COALESCE(@GrandTotalRow + ',ISNULL(SUM([' + CAST(Sektion AS VARCHAR)+']),0)', 'ISNULL(SUM([' + CAST(Sektion AS VARCHAR)+']),0)')
    FROM	tbl_Test ORDER BY  Sektion 
    
    /* MAIN QUERY */
    DECLARE @FinalQuery NVARCHAR (MAX)
    SET @FinalQuery = 	'SELECT *, ('+ @GrandTotalCol + ')AS [Total_Row] INTO #temp_MatchesTotal
    			FROM
    				(SELECT Team
    					    ,CAST(Sektion as VARCHAR) as Sektion
    					    ,anzahl  
    				FROM tbl_Test 
    				) A
    			PIVOT
    				(
    				 SUM(anzahl)
    				 FOR Sektion
    				 IN ('+@columnHeaders +')
    				) B
    ORDER BY Team 
    SELECT * FROM #temp_MatchesTotal UNION ALL
    SELECT ''Total_Col'','+@GrandTotalRow +',ISNULL (SUM([Total_ROW]),0) FROM #temp_MatchesTotal
    DROP TABLE #temp_MatchesTotal'	
    EXECUTE(@FinalQuery)
    Drop TABLE tbl_Test
Working...
X