我有一张表格如下:
table1
col1 col2 col3
1 A 1
2 B 1
3 A 2
4 D 2
5 X 3
6 G 3
现在我可以从上表中得到如下结果。以下结果集中的col2基于上面table1中的col3。在上面的table1 col2中,A和B在COL3中具有相同的id值(即1),因此在结果集中我们只是将它分隔在新列中,依此类推。 A和D具有相同的id COL3(即2),并且X和G在上表1中的COL3(即3)中具有相同的id。任何人都可以编写一个SQL查询来获得以下结果。
col1 col2
A B
A D
X G
答案 0 :(得分:2)
SELECT
t1.col2 as col1,
t2.col2
FROM Table1 t1
INNER JOIN Table1 t2 on t1.col3 = t2.col3
WHERE t1.col1 > t2.col1
答案 1 :(得分:2)
SELECT
col1 = t.col2,
col2 = t2.col2
FROM table1 t
INNER JOIN table1 t2 ON t.col3 = t2.col3 AND t.col1 < t2.col1
答案 2 :(得分:1)
如果您使用的是SQL Server 2005或更高版本:
WITH ranked AS (
SELECT
*,
rn = ROW_NUMBER() OVER (PARTITION BY col3 ORDER BY col2)
FROM table1
)
SELECT
col1 = r1.col2,
col2 = r2.col2
FROM ranked r1
INNER JOIN ranked r2 ON r1.col3 = r2.col3
WHERE r1.rn = 1
AND r2.rn = 2
答案 3 :(得分:0)
select
a.col2 as "col1",
b.col2 as "Col2"
from
table1 a
join table1 b on a.col3 = b.col3
答案 4 :(得分:0)
对表结构有一些假设,即col3中对于col3中的每个唯一值,恰好存在2个条目。
DECLARE @table1 TABLE([col1] int, [col2] varchar, [col3] int);
INSERT INTO @table1(col1, col2, col3) VALUES(1, 'A', 1);
INTO @table1(col1, col2, col3) VALUES(2, 'B', 1);
INSERT INTO @table1(col1, col2, col3) VALUES(3, 'A', 2);
INSERT INTO @table1(col1, col2, col3) VALUES(4, 'D', 2);
INSERT INTO @table1(col1, col2, col3) VALUES(5, 'X', 3);
INSERT INTO @table1(col1, col2, col3) VALUES(6, 'G', 3);
SELECT
(SELECT TOP(1) t1.[col2] FROM @table1 AS t1 WHERE t1.[col3] = g.[GroupId] ORDER BY t1.[col1] ASC) AS [a],
(SELECT TOP(1) t2.[col2] FROM @table1 AS t2 WHERE t2.[col3] = g.[GroupId] ORDER BY t2.[col1] DESC) AS [b]
FROM
(SELECT DISTINCT u.col3 AS [GroupId] FROM @table1 AS u) AS g