-- Collection of code snippets by Arne Vajhøj 
-- posted to eksperten.dk, usenet and other places (2002-now) 
CREATE TABLE kunde (
    kid INTEGER NOT NULL,
    fornavn VARCHAR(25),
    efternavn VARCHAR(25),
    PRIMARY KEY(kid)
);
CREATE TABLE produkt (
    pid INTEGER NOT NULL,
    kid INTEGER,
    prodnavn VARCHAR(50),
    prodpris DECIMAL(12,2),
    PRIMARY KEY(pid)
);

INSERT INTO kunde VALUES(1,'A','AA');
INSERT INTO kunde VALUES(2,'B','BB');
INSERT INTO kunde VALUES(3,'C','CC');
INSERT INTO produkt VALUES(1,1,'X1', 1.11);
INSERT INTO produkt VALUES(2,1,'X2', 2.22);
INSERT INTO produkt VALUES(3,1,'X3', 3.33);
INSERT INTO produkt VALUES(4,2,'X4', 4.44);
INSERT INTO produkt VALUES(5,2,'X5', 5.55);
INSERT INTO produkt VALUES(6,3,'X6', 6.66);

SELECT kunde.kid,kunde.fornavn,kunde.efternavn,produkt.prodnavn,produkt.prodpris
FROM kunde JOIN produkt ON kunde.kid=produkt.kid
ORDER BY kunde.kid,produkt.pid;

SELECT k.kid,k.fornavn,k.efternavn,p1.prodnavn,p1.prodpris,p2.prodnavn,p2.prodpris,p3.prodnavn,p3.prodpris
FROM ((kunde k LEFT JOIN produkt p1 ON k.kid=p1.kid)
     LEFT JOIN produkt p2 ON k.kid=p2.kid AND p1.pid < p2.pid)
     LEFT JOIN produkt p3 ON k.kid=p3.kid AND p2.pid < p3.pid
WHERE p1.pid = (SELECT MIN(pid) FROM produkt pp WHERE pp.kid=k.kid)
      AND (p3.pid IS NULL XOR (SELECT COUNT(pid) FROM produkt pp WHERE pp.kid=k.kid)=3)
ORDER BY k.kid;

DROP TABLE kunde;
DROP TABLE produkt;
