All,SQL Zeile in Zieltabelle auszuwählen, basierend auf Daten, die in mehreren Reihen in Treibertabelle
Siehe unten Datenwerte in zwei Tabellen:
erste Tabelle: oder Treibertabelle enthält Filterkriterien für die IDs der Auswahl aus der zweiten Tabelle
Key1 Value
1 Banks
1 Col1|Small
2 InsuranceCompany
2 Col2|Global
3 Banks
3 Col1|Big
3 Col2|Local
4 CreditUnion
Script
GO
CREATE TABLE [dbo].[TEST_DRIVER](
[Key1] [int] NOT NULL,
[Value] [varchar](50) NOT NULL
);
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('1', 'Banks');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('1', 'Col1|Small');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('2', 'InsuranceCompany');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('2', 'Col2|Global');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('3', 'Banks');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('3', 'Col1|Big');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('3', 'Col2|Local');
GO
INSERT INTO dbo.TEST_DRIVER(Key1, Value)
VALUES('4', 'CreditUnion');
GO
Hinweis: a) Filterkriterien können in 1, 2 oder 3 Reihen existieren. b) Die ersten Auswahlkriterien werden immer mit der InstitutionsType-Spalte der zweiten Tabelle verknüpft, das zweite und das dritte Kriterium können jedoch nicht existieren und die Spalte, zu der sie hinzugefügt wird, wird in den Daten selbst mit | angegeben Trennsäulen mit Wert
SECOND Tabellenname: IDs aus dieser Tabelle muß in FIRST Tabelle
ID InstitutionType Col1 Col2
100 Banks Small
200 Banks Global
300 Banks Big Local
400 InsuranceCompany Small Local
500 InsuranceCompany Global
600 CreditUnion Small Local
700 CreditUnion Global
800 CDO Global
Script
CREATE TABLE [dbo].[TEST_TARGET](
[ID] [int] NOT NULL,
[InstitutionType] [varchar](50) NOT NULL,
[Col1] [varchar](50) NULL,
[Col2] [varchar](50) NULL
);
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('100', 'Banks', 'Small', '');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('200', 'Banks', '', 'Global');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('300', 'Banks', 'Big', 'Local');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('400', 'InsuranceCompany', 'Small', 'Local');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('500', 'InsuranceCompany', '', 'Global');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('600', 'CreditUnion', 'Small', 'Local');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('700', 'CreditUnion', '', 'Global');
GO
INSERT INTO [dbo].[TEST_TARGET](ID, InstitutionType, Col1, Col2)
VALUES('800', 'CDO', '', 'Global');
GO
ERWARTETES ERGEBNIS basierend auf Filterkriterien gefunden werden:
ID
100
300
500
600
700
Ich kann es mit Cursor/while-Schleife tun, aber ich möchte es mit Abfrage Logik tun. Kann jemand bitte versuchen, dieses interessante Problem zu beantworten?
Meinst du nicht SELECT Logik nicht SET Logik? – Hogan
Sie würden nicht mit so genannten interessanten Problem enden, wenn Sie Ihre Tabellen richtig entwerfen würden ... –
Hallo James, ich stimme mit Ihrem Punkt, aber es gibt Zeiten, wenn Ihre Hände gebunden sind, wenn Sie Daten von externen Systemen und Daten in externe Systeme pushen. – Nilesh