If only the IDs that match all the values of each other is the part of interest, one way to go is to check how many value each ID has then match those with the same count and check how many value are matched
With R AS (
SELECT id, Count(1) Dim
FROM Table1
GROUP BY id
)
SELECT r1.id id_1, r2.id id_2
FROM R r1
INNER JOIN R r2 ON r1.dim = r2.dim
INNER JOIN Table1 t1 ON r1.id = t1.id
INNER JOIN Table1 t2 ON r2.id = t2.id AND t1.value = t2.value
AND t2.id > t1.id
GROUP BY r1.id, r2.id
HAVING COUNT(1) = MAX(r1.dim);
the t2.id > t1.id
condition is to avoid the pair to be repeated
To get a resultset more similar to the one in the question the previous query can be used as a base to JOIN
again with the table
With R AS (
SELECT id, Count(1) Dim
FROM Table1
GROUP BY id
), M AS (
SELECT r1.id id_1, r2.id id_2
FROM R r1
INNER JOIN R r2 ON r1.dim = r2.dim
INNER JOIN Table1 t1 ON r1.id = t1.id
INNER JOIN Table1 t2 ON r2.id = t2.id AND t1.value = t2.value
AND t2.id > t1.id
GROUP BY r1.id, r2.id
HAVING COUNT(1) = MAX(r1.dim)
)
SELECT t1.id id_1, t1.value value_1, t1.id base_value
, t2.id id_2, t2.value value_2, t1.id base_value_2
FROM M
INNER JOIN Table1 t1 ON m.id_1 = t1.id
INNER JOIN Table1 t2 ON m.id_2 = t2.id AND t1.value = t2.value
SQLFiddle demo with both the queries.
Even if the demo is in SQLServer 2012, the queries were written using only standard command.
If the OP uses MySQL the part within WITH
need to be converted to subqueries in the FROM
clause.