Announcement

Collapse
No announcement yet.

Sortierung in Tabelle

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

  • Sortierung in Tabelle

    Hallo,

    ich habe eine SQL Tabelle mit drei Spalten (Jahr, Kostenstelle (Integer), Kosten)
    Die entsprechende Abfrage habe ich im MS Visual Studio in einem DataSet erstellt.
    Jetzt habe ich in der Entwurfebene ein Berichtselement Tabelle erstellt.
    Die Sortierung funktioniert aber nicht richtig.
    Je nach eingestellter Sortierreihenfolge stimmt nur die Sortierung des Jahres oder der Kostenstelle. Wenn ich z.B. nach Kostenstelle sortiere stimmt deren Reihenfolge 1, 2, 3 usw. aber die Jahre die keinen Datensatz für diese Kostenstelle haben werden hinten an die anderen Jahre angehangen.
    Wie kann ich die Sortierung so anpassen, dass auch Jahre ohne Wert richig sortiert werden.

  • #2
    Und wie soll etwas sortiert werden, dass keinen Wert besitzt?

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Vielleicht auch mal Beispieldaten und das gewünschte Ergebnis dazu posten Danke!

      Comment


      • #4
        @ dimitri --> Das Jahr hat schon Werte aber nicht in den ersten Kostenstellen sondern erst in den höheren.

        @ fanderlf
        Bsp Daten:

        Jahr: 2006 Kostenstelle: 1 Kosten: 10 EUR
        Jahr: 2007 Kostenstelle: 1 Kosten: 10 EUR
        Jahr: 2008 Kostenstelle: 1 Kosten: 10 EUR
        Jahr: 2009 Kostenstelle: 1 Kosten: 10 EUR
        Jahr: 2010 Kostenstelle: 1 Kosten: 10 EUR

        Jahr: 2005 Kostenstelle: 2 Kosten: 20 EUR
        Jahr: 2006 Kostenstelle: 2 Kosten: 20 EUR
        Jahr: 2007 Kostenstelle: 2 Kosten: 20 EUR
        Jahr: 2008 Kostenstelle: 2 Kosten: 20 EUR
        Jahr: 2009 Kostenstelle: 2 Kosten: 20 EUR
        Jahr: 2010 Kostenstelle: 2 Kosten: 20 EUR

        Jahr: 2005 Kostenstelle: 3 Kosten: 30 EUR
        Jahr: 2006 Kostenstelle: 3 Kosten: 30 EUR
        Jahr: 2007 Kostenstelle: 3 Kosten: 30 EUR
        Jahr: 2008 Kostenstelle: 3 Kosten: 30 EUR
        Jahr: 2009 Kostenstelle: 3 Kosten: 30 EUR
        Jahr: 2010 Kostenstelle: 3 Kosten: 30 EUR


        Das fertige Ergebnis sollte dann so aussehen:

        Jahr
        KST_2005_ 2006_2007_2008_2009_2010
        1_________10___10___10___10___10____50
        2____20___20___20___20___20___20___120
        3____30___30___30___30___30___30___180
        es sieht aber so aus:

        Jahr
        KST__2006_2007_2008_2009_2010_2005
        1____10___10___10___10___10_________50
        2____20___20___20___20___20___20___120
        3____30___30___30___30___30___30___180

        Das Jahr 2005 steht am Ende da die KST 1 keine Kosten hat.

        Comment


        • #5
          Dynamisch geht das so gar nicht. Das nennt man transposition einer Tabelle und ist mit SQL nur sehr eingeschränkt möglich. Ich würde es entweder per Stored Procedure bzw. auf dem client machen.

          Comment


          • #6
            [HIGHLIGHT="SQL"]WITH Data AS
            ( SELECT 2006 as Jahr, 1 As KS, 10 AS K UNION ALL
            SELECT 2007 as Jahr, 1 As KS, 10 AS K UNION ALL
            SELECT 2008 as Jahr, 1 As KS, 10 AS K UNION ALL
            SELECT 2005 as Jahr, 2 As KS, 20 AS K UNION ALL
            SELECT 2006 as Jahr, 2 As KS, 20 AS K UNION ALL
            SELECT 2007 as Jahr, 2 As KS, 20 AS K UNION ALL
            SELECT 2008 as Jahr, 2 As KS, 20 AS K UNION ALL
            SELECT 2005 as Jahr, 3 As KS, 30 AS K UNION ALL
            SELECT 2006 as Jahr, 3 As KS, 30 AS K UNION ALL
            SELECT 2007 as Jahr, 3 As KS, 30 AS K UNION ALL
            SELECT 2008 as Jahr, 3 As KS, 30 AS K
            )
            SELECT Ks
            , MAX (CASE WHEN Jahr = 2005 THEN K END) AS J2005
            , MAX (CASE WHEN Jahr = 2006 THEN K END) AS J2006
            , MAX (CASE WHEN Jahr = 2007 THEN K END) AS J2007
            , MAX (CASE WHEN Jahr = 2008 THEN K END) AS J2008
            FROm Data
            GROUP BY KS

            -- Ks J2005 J2006 J2007 J2008
            -- ----------- ----------- ----------- ----------- -----------
            -- 1 NULL 10 10 10
            -- 2 20 20 20 20
            -- 3 30 30 30 30[/HIGHLIGHT]

            Beispiel in SQL-Server 2008, WITH dient nur zur Bereitstellung der Daten...

            Comment

            Working...
            X