--This script allows you to find unique pairs in a set. You can check

--results by using the Counting Rule for Combinations

--C = n!/(r!(n-r)!). For example, how many combinations of 2 can be made

--out of a set of 4. 4!/(2!(4-2)!)=6 pairs of 2. This script uses a union to block the select

--statements together. You lose your ID numbers in seperate fields here but

--you have the rest together all in one concise statement. A big improvement

--in performance when compared to the original ideas in solving this problem.

 

--This is for comparison with the T-SQL script. My starting point with DB2.

 

--By C. Eric Cashon

 

 

 

CREATE TABLE PairsTest (

  ID int NOT NULL

    GENERATED ALWAYS AS IDENTITY

      (START WITH 1, INCREMENT BY 1, CACHE 10),

  WellID varchar(10),

  ChemName varchar(30));

 

 

 

INSERT INTO PairsTest(WellID, ChemName) VALUES ('A01', 'Parrot')

                                              ,('A02', 'Dog')

                                              ,('A03', 'Cat')

                                              ,('A04', 'Elephant')

                                              ,('A05', 'Iguana')

                                              ,('A06', 'Turtle')

                                              ,('A07', 'Shark')

                                              ,('A08', 'Frog')

                                              ,('A09', 'Toad')

                                              ,('A10', 'Crow');

 

 

CREATE VIEW PairsTest1 (WellID, ChemName)

    AS

       SELECT WellID, ChemName FROM PairsTest

       UNION

       SELECT T1.WellID || T2.WellID as Combo,

       T1.ChemName || ', ' || T2.ChemName as Names FROM

       PairsTest T1, PairsTest T2

       WHERE T1.ID < T2.ID

       UNION

       SELECT T1.WellID || T2.WellID || T3.WellID as Combo,

       T1.ChemName || ', ' || T2.ChemName || ', ' || T3.ChemName as Names FROM

       PairsTest T1, PairsTest T2, PairsTest T3

       WHERE T1.ID < T2.ID AND T2.ID < T3.ID

       AND T1.ID < T3.ID;

      

     

--C = 10!/(1!(10 - 1)!)

--  = 10

--C = 10!/(2!(10 - 2)!)

--  = 45

--C = 10!/(3!(10 - 3)!)

--C = 120

--Total = 175

      

SELECT * FROM PairsTest1;

SELECT COUNT(*) FROM PairsTest1 WHERE WellID LIKE'___';

SELECT COUNT(*) FROM PairsTest1 WHERE WellID LIKE'______';

SELECT COUNT(*) FROM PairsTest1 WHERE WellID LIKE'_________';

 

--Clean up

DROP VIEW PairsTest1;

DROP TABLE PairsTest;