none
doppelte Einträge anzeigen RRS feed

  • Frage

  • Hallo liebe SQL-Experten,

    ich versuche gerade aus einem Unter-bestand meiner Objektetabelle alle Datensätze rauszufiltern, die im Feld =b_F2 mehrfache Einträge aufweisen, mein Versuch war folgender:

    Use Archiv8 select Ob_ID,Ob_F2,Ob_F1,ob_f20 ,COUNT(Ob_F2) FROM M_objekte1 INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID WHERE B_intAbk Like 'A Rep%'; GROUP BY Ob_F2 HAVING (COUNT(Ob_F2) > 1)

    ----------

    Fehler:

    Meldung 156, Ebene 15, Status 1, Zeile 10
    Falsche Syntax in der Nähe des GROUP-Schlüsselworts.


    Leider funktioniert dies nicht, hat jemand einen anderen Vorschlag?

    LG

    Chris

    Freitag, 13. Juli 2018 09:16

Alle Antworten

  • Hi,

    das Semikolon hinter Like 'A Rep%' muss weg.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. Juli 2018 09:17
    Moderator
  • Danke, aber dann kommt folgendes:

    Meldung 8120, Ebene 16, Status 1, Zeile 4
    Die M_objekte1.Ob_ID-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

    Freitag, 13. Juli 2018 09:33
  • Hi,

    nuja, der eine Fehler schließt den anderen nicht aus.

    Die Fehlermeldung ist eigentlich recht eindeutig und sagt: Entweder stehen die selektierten Spalten alle in der GROUP BY Klausel oder sie müssen im SELECT in einer Aggegratfuiktion wie MAX, MIN, SUM, usw. verwendet werden.

    SELECT   MIN( Ob_ID ),
             Ob_F2,
             MIN( Ob_F1 ),
             MIN( Ob_F20 ),
             COUNT( 1 ) AS Anzahl
    FROM     M_objekte1
             INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE    B_intAbk Like 'A Rep%'
    GROUP BY Ob_F2
    HAVING   COUNT( 1 ) > 1

    Da Du aber wohl eher alle Datensätze sehen willst, die einen entsprechend mehrfach vorkommenden Wert in Ob_F2 haben, wäre wohl sowas eher geeignet:

    WITH Query AS
    (
    SELECT   Ob_F2
    FROM     M_objekte1
             INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE    B_intAbk Like 'A Rep%'
    GROUP BY Ob_F2
    HAVING   COUNT( 1 ) > 1
    )
    SELECT <Spaltenliste>
    FROM   M_objekte1
    WHERE  Ob_F2 IN ( SELECT ObF2 FROM Query )

    Ggfs. das äußere SELECT nochmal mit dem JOIN und der Einschränkung versehen, falls Du das brauchst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. Juli 2018 09:41
    Moderator
  • Also ich habe das letztere versucht:

    WITH Query AS
    (
    SELECT   Ob_F2
    FROM     M_objekte1
             INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE    B_intAbk Like 'A Rep%'
    GROUP BY Ob_F2
    HAVING   COUNT( 1 ) > 1
    )
    SELECT <Spaltenliste>
    FROM   M_objekte1
    WHERE  Ob_F2 IN ( SELECT ObF2 FROM Query )

    Diesmal kam folgender Fehler:

    Meldung 102, Ebene 15, Status 1, Zeile 11
    Falsche Syntax in der Nähe von '<'.

    Bin langsam am verzweifeln

    Gruss

    chris

    Freitag, 13. Juli 2018 11:02
  • Och Chris.

    echt jetzt? Ein wenig mitdenken musst Du schon.

    <Spaltenliste> ist natürlich nichts, was Du einsetzen kannst. Ersetz das durch die Liste der Spalten, die Du selektieren willst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. Juli 2018 11:06
    Moderator
  • oh ok sorry, hatte ich jetzt nicht gesehen, werd ich gleich mal probieren, danke noch mal
    Freitag, 13. Juli 2018 11:08
  • So habs jetzt probiert:

    WITH Query AS
    (
    SELECT   Ob_F2
    FROM     M_objekte1
             INNER JOIN M_Bestaende ON M_Objekte1.B_ID = M_Bestaende.B_ID
    WHERE    B_intAbk = 'APr.Br.Rep. 030-05-01'
    GROUP BY Ob_F2
    HAVING   COUNT( 1 ) > 1
    )
    SELECT Ob_ID,Ob_F2,Ob_F1, Ob_f20
    FROM   M_objekte1
    WHERE  Ob_F2 IN ( SELECT Ob_F2 FROM Query )
    Ich weiss dass diese Teilmenge, bzw dieser BEstand mindest 10 Duplikate im Feld 0b_F2 aufweisst. Er kommt hier diesmal zwar mit keinem Fehler, aber findet auch nichts. Schade

    Freitag, 13. Juli 2018 11:18
  • Jetzt hat ess funktioniert, hatte nen Fehler in dern Where Klausel, wenn man zig Sachen gleichzeitig halt macht, danke vielmals noch mal

    Schönes Wochenende

    Gruss

    Chris

    Freitag, 13. Juli 2018 11:44
  • Hallo Christ,

    wir wissen aber leider rein gar nichts von deinen Tabellen, deren Daten, ...

    Poste bitte die CREATE TABLE Statements für beide Tabellen, dazu dann INSERT INTO Statements für Beispieldaten und dazu dann bitte das gewünschte bzw. erwartete Ergebnis.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. Juli 2018 11:48
    Moderator
  • Der absolute Wahnsinn wäre es natürlich nun wenn man die Abfrage auch noch über die ganze Objekte1-tabelle laufenlassen könnte, gruppiert nach B_intAbk, aber das geht sicher nicht, oder?

    Schönes Wochenende und Danke noch mal

    Freitag, 13. Juli 2018 12:29
  • Hi,

    Chris:
    Der absolute Wahnsinn wäre es natürlich nun wenn man die Abfrage auch noch über die ganze Objekte1-tabelle laufenlassen könnte, gruppiert nach B_intAbk, aber das geht sicher nicht, oder?
    Ich:
    wir wissen aber leider rein gar nichts von deinen Tabellen, deren Daten, ...

    Poste bitte die CREATE TABLE Statements für beide Tabellen, dazu dann INSERT INTO Statements für Beispieldaten und dazu dann bitte das gewünschte bzw. erwartete Ergebnis.

    mehr lässt sich da eigentlich nicht sagen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 13. Juli 2018 13:23
    Moderator
  • Hallo und einen schönen Wochenanfang,

    also die Sache ist die, es gibt 2 Haupttabellen, Objekte und Bestände die über B_ID verknüpft sind. Ein und dieselbe OB_F2 (laufende Nummer) darf in unterschiedlichen Beständen natürlich vorkommen, hätte diese Abfrage einfach nur gerne über alle Bestände, dann innerhalb der Bestände sortiert nach lfd und gruppiert nach Bestand. Meine Tabellen Struktur sieht so aus.

    USE [DB]
    GO
    /****** Object:  Table [dbo].[M_Bestaende]    Script Date: 13.07.2018 20:55:15 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[M_Bestaende](
    	[B_Id] [int] IDENTITY(1,1) NOT NULL,
    	[B_lowerintAbk] [nvarchar](255) NULL,
    	[B_intAbk] [nvarchar](255) NOT NULL,
    	[B_Name] [nvarchar](255) NOT NULL,
    	[B_GastRecherche] [int] NULL,
    	[F_ID] [int] NOT NULL,
    	[F_ID2] [int] NULL,
    	[F_ID3] [int] NULL,
    	[F_ID4] [int] NULL,
    	[F_ID5] [int] NULL,
    	[Sys_Id] [int] NULL,
    	[Sys2_Id] [int] NULL,
    	[T_ID] [int] NULL,
    	[P_ID_B] [int] NULL,
    	[P_ID_H] [int] NULL,
    	[B_Offset] [real] NULL,
    	[B_Gesperrt] [nvarchar](10) NULL,
    	[B_gesperrt_bis] [datetime] NULL,
    	[Bn_ID] [int] NULL,
    	[B_Vorwort] [text] NULL,
    	[B_Matchcode] [nvarchar](10) NULL,
    	[B_DummyChar] [varchar](255) NULL,
    	[B_GastFormAktiv] [int] NULL,
    	[B_Vorgaenger] [nvarchar](255) NULL,
    	[B_Nachfolger] [nvarchar](255) NULL,
    	[B_Referent] [nvarchar](255) NULL,
    	[B_Benutzungsbeschraenkung] [nvarchar](255) NULL,
    	[B_Lagerung] [nvarchar](255) NULL,
    	[B_Abgebende_Stelle] [nvarchar](255) NULL,
    	[B_DatVon] [int] NULL,
    	[B_DatBis] [int] NULL,
    	[B_Erschliessungszustand] [nvarchar](2000) NULL,
    	[B_Veroeffentlichungen] [text] NULL,
    	[B_Film] [nvarchar](255) NULL,
    	[B_Zitierweise] [nvarchar](250) NULL,
    	[B_Revisionen] [nvarchar](250) NULL,
    	[B_Bemerkungen] [text] NULL,
    	[B_Inhalt] [text] NULL,
    	[P_Id] [int] NULL,
    	[koe_id] [int] NULL,
    	[B_Depositum] [int] NULL,
    	[B_Benutzungsmodalitaeten] [nvarchar](200) NULL,
    	[B_Verweis] [text] NULL,
    	[B_Typ] [int] NULL,
    	[B_Bestandsnummer] [int] NULL,
    	[B_Sortierposition] [int] NULL,
    	[B_Kurzbeschreibung] [text] NULL,
    	[B_Sperrfristen] [nvarchar](50) NULL,
    	[B_firstdate] [datetime] NULL,
    	[B_lastdate] [datetime] NULL,
    	[B_lastuser] [int] NULL,
    	[B_Materialart] [nvarchar](255) NULL,
    	[B_Materialart_kuerzel] [nvarchar](255) NULL,
    	[B_Sprachcode] [nvarchar](255) NULL,
    	[B_Laendercode] [nvarchar](10) NULL,
    	[B_Provenienz] [nvarchar](255) NULL,
    	[B_Reproduktionsbeschraenkung] [nvarchar](255) NULL,
    	[B_Literaturhinweis] [nvarchar](2000) NULL,
    	[B_Reproduktionen] [nvarchar](255) NULL,
    	[B_Verzeichnungsgrundsatz] [nvarchar](255) NULL,
    	[B_Qualitaet] [nvarchar](4000) NULL,
    	[B_Sicherung] [nvarchar](255) NULL,
    	[B_Erwerbdatum] [datetime] NULL,
    	[b_zeitraum] [nvarchar](255) NULL,
    	[F_ID_Gast] [int] NULL,
    	[B_IAsort] [int] NULL,
    	[B_IAvorgaenger] [nvarchar](255) NULL,
    	[B_Aufbewahrungsort_Orig] [nvarchar](255) NULL,
    	[B_Ordungsarbeit] [nvarchar](255) NULL,
    	[P_ID_Type] [int] NULL,
    	[B_SperrfristVererben] [int] NULL,
    	[V_Id] [int] NULL,
     CONSTRAINT [PK_M_Bestaende] PRIMARY KEY NONCLUSTERED 
    (
    	[B_Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
     CONSTRAINT [unq_M_Bestaende] UNIQUE NONCLUSTERED 
    (
    	[B_intAbk] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    /****** Object:  Table [dbo].[M_Objekte1]    Script Date: 13.07.2018 20:55:15 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[M_Objekte1](
    	[Ob_ID] [int] IDENTITY(1,1) NOT NULL,
    	[B_ID] [int] NOT NULL,
    	[St_ID] [int] NOT NULL,
    	[ID] [int] NOT NULL,
    	[H_ID] [int] NOT NULL,
    	[F_ID] [int] NOT NULL,
    	[Syg_ID] [int] NOT NULL,
    	[Syg2_id] [int] NOT NULL,
    	[Sch_id] [int] NOT NULL,
    	[Bn_ID] [int] NULL,
    	[Ob_f1] [nvarchar](255) NULL,
    	[Ob_f2] [nvarchar](255) NULL,
    	[Ob_f3] [nvarchar](255) NULL,
    	[Ob_f4] [nvarchar](255) NULL,
    	[Ob_f5] [nvarchar](255) NULL,
    	[Ob_f6] [nvarchar](255) NULL,
    	[Ob_f7] [nvarchar](255) NULL,
    	[Ob_f8] [nvarchar](255) NULL,
    	[Ob_f9] [nvarchar](255) NULL,
    	[Ob_f10] [nvarchar](255) NULL,
    	[Ob_f11] [nvarchar](255) NULL,
    	[Ob_f12] [nvarchar](255) NULL,
    	[Ob_f13] [nvarchar](255) NULL,
    	[Ob_f14] [nvarchar](255) NULL,
    	[Ob_f15] [nvarchar](255) NULL,
    	[Ob_f16] [nvarchar](255) NULL,
    	[Ob_f17] [nvarchar](255) NULL,
    	[Ob_f18] [nvarchar](255) NULL,
    	[Ob_f19] [nvarchar](255) NULL,
    	[Ob_f20] [ntext] NOT NULL,
    	[Ob_f21] [ntext] NULL,
    	[Ob_f22] [ntext] NULL,
    	[Ob_f23] [ntext] NULL,
    	[Ob_f24] [ntext] NULL,
    	[Ob_f25] [ntext] NULL,
    	[Ob_f26] [ntext] NULL,
    	[Ob_f27] [ntext] NULL,
    	[Ob_f28] [ntext] NULL,
    	[Ob_f29] [ntext] NULL,
    	[Ob_f30] [float] NULL,
    	[Ob_f31] [float] NULL,
    	[Ob_f32] [datetime] NULL,
    	[Ob_f33] [float] NULL,
    	[Ob_f34] [float] NULL,
    	[Ob_f35] [float] NULL,
    	[Ob_f36] [float] NULL,
    	[Ob_f37] [float] NULL,
    	[Ob_f38] [datetime] NULL,
    	[Ob_f39] [datetime] NULL,
    	[Ob_f41] [float] NOT NULL,
    	[Ob_dformat] [tinyint] NULL,
    	[Ob_firstdate] [datetime] NULL,
    	[Ob_lastdate] [datetime] NULL,
    	[Lastuser] [int] NULL,
    	[Ob_Fdat] [varchar](255) NULL,
    	[Ob_sort] [float] NULL,
    	[OB_Rech] [int] NULL,
    	[BST_ID] [int] NULL,
    	[Ob_BnLastdate] [datetime] NULL,
     CONSTRAINT [PK_Ob1] PRIMARY KEY NONCLUSTERED 
    (
    	[Ob_ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
     CONSTRAINT [unq_Objekte1] UNIQUE NONCLUSTERED 
    (
    	[Ob_f41] ASC,
    	[B_ID] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [B_GastRecherche]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID2]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID3]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID4]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID5]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [Sys_Id]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [Sys2_Id]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [T_ID]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [P_ID_B]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [P_ID_H]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [B_Offset]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT ('ja') FOR [B_Gesperrt]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [Bn_ID]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [B_GastFormAktiv]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [P_Id]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  CONSTRAINT [DF_X]  DEFAULT ((0)) FOR [B_Depositum]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (0) FOR [B_Sortierposition]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (getdate()) FOR [B_firstdate]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT (1) FOR [F_ID_Gast]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT ((1)) FOR [P_ID_Type]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT ((0)) FOR [B_SperrfristVererben]
    GO
    ALTER TABLE [dbo].[M_Bestaende] ADD  DEFAULT ((0)) FOR [V_Id]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [St_ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [H_ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [F_ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [Syg_ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [Syg2_id]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [Sch_id]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (getdate()) FOR [Ob_firstdate]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [Ob_sort]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (0) FOR [OB_Rech]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT ((0)) FOR [BST_ID]
    GO
    ALTER TABLE [dbo].[M_Objekte1] ADD  DEFAULT (getdate()) FOR [Ob_BnLastdate]
    GO


    eINE schöne Woche noch,

    Chris

    • Bearbeitet Chris4712 Montag, 16. Juli 2018 06:09
    Montag, 16. Juli 2018 06:08