Announcement

Collapse
No announcement yet.

Abfrage SQL Server 2008 bringt falsches Ergebniss???

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

  • Abfrage SQL Server 2008 bringt falsches Ergebniss???

    Hi,

    ich hoffe jemand kann mir helfen denn ich weiß im Moment nicht wie der Fehler zu beheben ist. Ich Joine 2 Views miteinander.

    In diesem Join möchte ich alles aus V1 haben, was in der Where Bedingung steht, und nur das was über den Join zu V2 passt. Also verwende ich einen LEFT OUTER JOIN.
    Hierbei wird aber zusätzlich über ein Datm festgelegt, das ich nur Werte aus V2 haben will, wenn das V1.Datum > V2.Datum ist, aber dennoch die Werte aus V1.

    Leider bekomme ich, sobald V1.Datum < V2.Datum ist, gar keine Werte angezeigt, auch nicht aus V1, wobei das mit meinem Join schon ein Ergebnis liefern müsste.

    Anbei mein SQL Statement:

    [highlight=sql]
    SELECT V1.Organisationseinheit, CAST(V1.SPSTB AS DATE) AS SPSTB,
    SUM(V1.ABI) AS ABI,V2.Stunden
    FROM dbo.V_ORA_SP_mit_OE_WTText V1 LEFT OUTER JOIN
    dbo.V_MAN_Erloeste_Stunden_WTText V2 ON V1.Organisationseinheit = V2.OE AND
    V1.WEEKDAY = V2.WEEKDAY AND
    CAST(V1.SPSTB AS DATE) > CAST(V2.[gueltig ab] AS DATE)
    WHERE (V1.DISPO = 'OPTIBUS' AND V1.DIB = 'M' AND (V2.KPI = '3.6' OR V2.KPI IS NULL))
    GROUP BY V1.Organisationseinheit, CAST(V1.SPSTB AS DATE),
    V2.Stunden
    [/highlight]









    Hoffe jemand kann mir Tipps geben.

    Danke schonmal.
    Zuletzt editiert von vms01; 22.03.2010, 17:21.

  • #2
    Hallo,

    bitte verwende für Quell- und SQL-Code eine entsprechende Formatierung! Wer soll denn das lesen?

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Habe es mal kurz mit ein paar Testdaten ausprobiert und hat funktioniert. Ich denke daher, das SELECT ist richtig, aber in deinen Daten passt was nicht ganz

      bye,
      Helmut

      Comment


      • #4
        Hi, danke schonmal fürs Testen.

        Ich kapiere leider echt nicht was da nicht passen soll....

        Ich habe es folgendermaßen getestet:

        Ich habe nur Daten in V1 ab 01.01.2010. In V2 ist in der Spalte das "gütig ab" Datum auf 01.01.2009.

        Nachdem ich das Select Statement ausgeführt habe, bekomme ich natürlich alle Datensätze, was auch korrekt ist.

        Dann habe ich einen Datensatz in V2 genommen und das Datum auf 01.01.2012 geändert.

        Wieder sollte ich alle Datensätze bekommen, nur dass in dem einen Datensatz die Informationen aus V1 angezeigt werden sollten, aber keine Infos aus V2, da er ja da keinen Join übers Datum machen kann.

        Bei mir fehlt aber der komplette Datensatz, obwohl es ein LEFT OUTER JOIN ist, was ja heißt, alles aus V1 und nur das aus V2 was auch passt.

        Wäre für jeden TIP dankbar.

        Ciao

        Comment


        • #5
          Du siehst das schon ganz richtig. Ich denke, wir kommen jetzt nur weiter, wenn du Testdaten zur Verfügung stellen kannst, mit denen das nachvollziehbar ist. Es reichen dafür die Daten aus den jeweils verwendeten Spalten der beiden Tabellen, den Rest könnte man schon mal weglassen. Dann versuchen, von den Testdaten solange Datenblöcke zu entfernen als der Fehler erhalten bleibt. Den Rest, mit dem das nachvollziehbar ist, hier posten oder verlinken oder wie immer. Habe schon Fälle erlebt, wo genau dadurch die Leute das eigentliche Problem erkannt haben und beheben konnten.

          Für die, die einsteigen wollen, hier mal mein Script für Tabellen plus Daten, mit denen ich getestet habe:
          Code:
          SET ANSI_NULLS ON
          GO
          SET QUOTED_IDENTIFIER ON
          GO
          SET ANSI_PADDING ON
          GO
          CREATE TABLE [dbo].[V_ORA_SP_mit_OE_WTText](
          	[Organisationseinheit] [varchar](50) NULL,
          	[SPSTB] [date] NULL,
          	[ABI] [real] NULL,
          	[Weekday] [int] NULL,
          	[DISPO] [varchar](50) NULL,
          	[DIB] [varchar](50) NULL
          ) ON [PRIMARY]
          GO
          SET ANSI_PADDING OFF
          GO
          INSERT [dbo].[V_ORA_SP_mit_OE_WTText] ([Organisationseinheit], [SPSTB], [ABI], [Weekday], [DISPO], [DIB]) VALUES (N'ORG1', CAST(0x4C320B00 AS Date), 2, 2, N'OPTIBUS', N'M')
          INSERT [dbo].[V_ORA_SP_mit_OE_WTText] ([Organisationseinheit], [SPSTB], [ABI], [Weekday], [DISPO], [DIB]) VALUES (N'ORG1', CAST(0x2D320B00 AS Date), 2.5, 3, N'OPTIBUS', N'M')
          INSERT [dbo].[V_ORA_SP_mit_OE_WTText] ([Organisationseinheit], [SPSTB], [ABI], [Weekday], [DISPO], [DIB]) VALUES (N'ORG1', CAST(0x2D320B00 AS Date), 2.7, 3, N'OPTIBUS', N'M')
          
          
          SET ANSI_NULLS ON
          GO
          SET QUOTED_IDENTIFIER ON
          GO
          SET ANSI_PADDING ON
          GO
          CREATE TABLE [dbo].[V_MAN_Erloeste_Stunden_WTText](
          	[Stunden] [real] NULL,
          	[OE] [varchar](50) NULL,
          	[Weekday] [int] NULL,
          	[gueltig ab] [date] NULL,
          	[KPI] [real] NULL
          ) ON [PRIMARY]
          GO
          SET ANSI_PADDING OFF
          GO
          INSERT [dbo].[V_MAN_Erloeste_Stunden_WTText] ([Stunden], [OE], [Weekday], [gueltig ab], [KPI]) VALUES (5, N'ORG1', 2, CAST(0x4C320B00 AS Date), 3.6)
          INSERT [dbo].[V_MAN_Erloeste_Stunden_WTText] ([Stunden], [OE], [Weekday], [gueltig ab], [KPI]) VALUES (7, N'ORG1', 2, CAST(0xDF300B00 AS Date), 3.6)
          INSERT [dbo].[V_MAN_Erloeste_Stunden_WTText] ([Stunden], [OE], [Weekday], [gueltig ab], [KPI]) VALUES (9, N'ORG1', 2, CAST(0x6B320B00 AS Date), 3.6)
          ... vielleicht könntest du meine Testdaten auch so umbauen, dass es nicht mehr funktioniert (oder wir kommen drauf, dass wir nicht ganz vom Gleichen reden).


          bye,
          Helmut

          Comment


          • #6
            Hab die Lösung!!

            Die Abfrage auf die KPI darf nicht in der Where Klausel sein, denn hier betrifft Sie komischerweise beide Tabellen. Wenn ich Sie aber in die LEFT OUTER JOIN Anweisung setze, dann funktioniert das ganze:

            [HIGHLIGHT=SQL]
            SELECT V1.Organisationseinheit, CAST(V1.SPSTB AS DATE) AS SPSTB,
            SUM(V1.ABI) AS ABI,V2.Stunden
            FROM dbo.V_ORA_SP_mit_OE_WTText V1 LEFT OUTER JOIN
            dbo.V_MAN_Erloeste_Stunden_WTText V2 ON V1.Organisationseinheit = V2.OE AND
            V1.WEEKDAY = V2.WEEKDAY AND
            CAST(V1.SPSTB AS DATE) > CAST(V2.[gueltig ab] AS DATE)
            AND (V2.KPI = '3.6' OR V2.KPI IS NULL)
            WHERE (V1.DISPO = 'OPTIBUS' AND V1.DIB = 'M')
            GROUP BY V1.Organisationseinheit, CAST(V1.SPSTB AS DATE),
            V2.Stunden
            [/HIGHLIGHT]



            Danke für die große Hilfe!!!

            Comment

            Working...
            X