Announcement

Collapse
No announcement yet.

Filterung

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

  • Filterung

    BId Typ Art Name
    --------------------------------------------------------------
    1 0 Stück Test
    2 1 <bauteilart> <gruppenname>
    3 2 <bauteilart> linetest.abc
    4 0 Stück testrx
    5 1 <bauteilart> <gruppenname>
    6 2 <bauteilart> 1.abc
    7 2 <bauteilart> 8.abc
    8 0 Stück ArcLine
    9 1 <bauteilart> <gruppenname>
    10 2 <bauteilart> 4.abc


    Hallo,
    ich habe ein SQL Tabelle wie oben, ich möchte die datensätze zwischen testrx und ArcLine Zeigen. Also testrx ist ein Stück , also ich möcchte bis nächste Stück alle datensätze haben. wie unten

    BId Typ Art Name
    --------------------------------------------------------------
    5 1 <bauteilart> <gruppenname>
    6 2 <bauteilart> 1.abc
    7 2 <bauteilart> 8.abc

    Ich konnte aber leider nicht das mit SQL befehle hinbekommen.
    Kann mir bitte jemand helfen
    Danke im Voraus für die Unterstützung

  • #2
    [highlight=sql]
    select T.*
    from TABLE T
    where T.BID > (select A.BID from TABLE A where A.NAME = 'testrx')
    and T.BID < (select B.BID from TABLE B where B.NAME = 'ArcLine')
    [/highlight]

    Geht sicher eleganter, aber so müsste es klappen.

    Comment


    • #3
      Vielen Dank aber wenn ich suche ich weiß dass ich von 'testrx' anfangen soll aber ich weß nicht dass ich bei der 'ArcLine' aufhören muss. Ich weiß nur dass wenn ich von 'testrx' anfange, dann muss bis die nächste Stück in die Tabelle laufen. Also ich weiß nicht dass nächste Stück 'ArcLine' heißt.

      Das heißt ich muss bis 8. Position laufen aber ich kenne weder der Nummer des Positions noch der Name. Ich weiß bloß dass ich bis nächste Stück laufen soll. Außer stück kenne ich nicht die andere infos wie Arcline

      Ich bitte um die Hilfe
      Vielen Dank

      Comment


      • #4
        Dann Probier es so:
        [highlight=sql]
        select T.*
        from TABLE T
        where T.BID > (select A.BID from TABLE A where A.NAME = 'testrx')
        and T.BID < (select min(B.BID) from TABLE B where B.BID > T.BID and B.TYP = 0)
        [/highlight]

        Geht sicher eleganter, aber so müsste es klappen.

        Comment


        • #5
          Danke für die Antwort aber es funktioniert immer noch nicht ..Weil ich kenne nähmlich kein TABLE befehl in MSSQL...
          ich glaub du machst aus 1 ne tabelle 3 verschiedene Tabellen A,B, und T und so löst du das problem.

          Aber TABLE befehl funktioniert bei mir nicht oder ich verstehe dein syntax nicht genau...
          Ich bitte um die Hilfe
          Vielen Dank

          Comment


          • #6
            Den Tabellennamen durch TABLE ersetzen.
            TABLE steht da nur weil wir deinen Tabellennamen nicht kennen.

            Comment


            • #7
              Code:
              SELECT *
                    FROM [Mgr].[dbo].[Baut]
                    WHERE BId > (SELECT BtId FROM [Mgr].[dbo].[Baut]  WHERE BName = 'testrx')
                    AND BId < (SELECT min(BId) FROM [Mgr].[dbo].[Baut]  WHERE BId > BId AND BTyp = 0)
              soll es dann so aussehen,???
              SO funktioniert es aber auch nicht , ich bekomme bloß leere tabellen..also es steht gar nix in meinem Tabelle

              Comment


              • #8
                Code:
                SELECT T.*
                      FROM [Mgr].[dbo].[Baut] T
                      WHERE T.BId > (SELECT A.BId FROM [Mgr].[dbo].[Baut] A  WHERE A.BName = 'testrx')
                      AND T.BId < (SELECT min(B.BtId) FROM [Mgr].[dbo].[Baut] B WHERE B.BId > T.BId AND B.BTyp = 0)
                und so funktioniert es auch nicht

                Comment


                • #9
                  Richtig, TABLE hatte ich nur genommen, weil ich keine Tabellennamen kannte.

                  Sorry, da ist ein Fehler drin. Das muss im zweiten Subselect nicht T.BId sondern A.BId heißen.

                  [highlight=sql]
                  SELECT T.*
                  FROM [Mgr].[dbo].[Baut] T
                  WHERE T.BId > (SELECT A.BId FROM [Mgr].[dbo].[Baut] A WHERE A.BName = 'testrx')
                  AND T.BId < (SELECT min(B.BId) FROM [Mgr].[dbo].[Baut] B WHERE B.BId > A.BId AND B.BTyp = 0)
                  [/highlight]

                  Comment


                  • #10
                    Hallo Danke für die antwort aber ich habe grad folgendes problem

                    Code:
                    Msg 107, Level 16, State 2, Line 2
                    Das Spaltenpräfix 'A' stimmt mit keinem in der Abfrage verwendeten Tabellen- oder Aliasnamen überein.
                    Also Es gibt ein syntax Error, ich denke der kennt die A nicht

                    Vielen Dank

                    Comment


                    • #11
                      Aber Wenn so wie unten mache

                      Code:
                         1. SELECT T.*
                         2. FROM [Mgr].[dbo].[Baut] T
                         3. WHERE T.BId > (SELECT A.BId FROM [Mgr].[dbo].[Baut] A  WHERE A.BName = 'testrx')
                         4. AND T.BId < (SELECT min(B.BId) FROM [Mgr].[dbo].[Baut] B WHERE B.BId > '4' AND B.BTyp = 0)
                      Also Anstatt A.BId habe ich '4' geschrieben, dann funktioniert es....
                      Der kennt irgendwie A.BId nicht...
                      Danke im Voraus für die Unterstützung

                      Comment


                      • #12
                        Das wird am zweiten Subselect liegen. Kann sein, dass du da noch ein Subsubselect einbauen musst in dem Where-Clause des zweiten Subselects. Aber dann frag ich mich wirklich, ob es nicht irgendwie eleganter geht.

                        Comment


                        • #13
                          wie meinst du , wei sollte ich das machen habe net genau verstanden

                          Comment


                          • #14
                            Der zweite Subselect ist

                            [highlight=sql]
                            (SELECT min(B.BId) FROM [Mgr].[dbo].[Baut] B WHERE B.BId > A.BId AND B.BTyp = 0)
                            [/highlight]

                            Das A.BId findet er nicht, da A nur innerhalb des ersten Subselects existiert.
                            Du musst also das erste Subselect anstelle von A.BId im zweiten Subselect wiederholen. Am Besten als C.
                            Dann sollte es klappen.

                            PS: Ein bisschen Eigendenken sollte man schon.

                            Comment

                            Working...
                            X