すべての複数の行のデータに基づいて、ターゲットテーブルの行を選択する:SQLは</p> <p>二つのテーブル内のデータ値の下を参照してください、ドライバテーブル
最初の表:またはドライバテーブルにはIDを選択するためのフィルタ基準を含んでいます第二表から
Key1 Value
1 Banks
1 Col1|Small
2 InsuranceCompany
2 Col2|Global
3 Banks
3 Col1|Big
3 Col2|Local
4 CreditUnion
スクリプト
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
注: a)フィルタ基準は、1行、2行または3行に存在する可能性があります。 b)最初の選択基準は、常に2番目のテーブルのInstitutionType列と結合しますが、2番目および3番目の条件が存在する場合と存在しない場合があり、結合する列は|
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
この表からIDが
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
FIRST表にフィルタ基準に基づいて発見される必要があるスクリプト
予想される出力:分離カラムは値SECOND表に名前を付ける
ID
100
300
500
600
700
私はカーソル/ whileループを使ってそれを行うことができますが、私はそれをクエリロジックを使ってやりたいと思います。誰かがこの面白い問題に答えることを試みてもいいですか?
SELECTロジックがSETロジックではないとお考えですか? – Hogan
テーブルを適切に設計すると、面白い問題が起きることはありません。 –
ハイ・ジェームズ、私はあなたの意見に同意しますが、外部システムからデータを取り込む必要があるときに手が縛られることがあります。外部システムにデータをプッシュします。 – Nilesh