Fragensteller
doppelte Einträge anzeigen

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
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 -
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 -
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
-
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 -
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
-
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 -
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 -
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