我在 SQL Server 2008 中有下表:
ID Type Value
6 A_Left A
6 B_Left B
6 C_Left C
6 D_Left D
6 E_Left E
6 A_Right A
6 B_Right B
6 C_Right C
6 D_Right D
6 E_Right E
我需要根据“值”列对它们进行分组,例如:
ID Type Type Value
6 A_Left A_Right A
6 B_Left B_Right B
6 C_Left C_Right C
6 D_Left D_Right D
6 E_Left E_Right E
这可能吗?我没有得到谷歌关于这种转置的确切术语。
最佳答案
使用INNER JOIN
,将表与自身连接起来。在连接的一侧,限制为那些匹配 _Left
的内容,在另一侧,限制为那些匹配 _Right
的内容。
SELECT
l.ID,
l.Type AS L_Type,
r.Type AS R_Type,
l.Value
FROM
t l
INNER JOIN t r ON l.ID = r.ID AND l.Value = r.Value
WHERE
RIGHT(l.type, 4) = 'Left'
AND RIGHT(r.type, 5) = 'Right'
这是一个演示:http://sqlfiddle.com/#!6/f6590/4
或者,您可以使用 LIKE
而不是 RIGHT()
字符串函数:
SELECT
l.ID,
l.Type AS L_Type,
r.Type AS R_Type,
l.Value
FROM
t l
INNER JOIN t r ON l.ID = r.ID AND l.Value = r.Value
WHERE
l.type LIKE '%_Left'
AND r.type LIKE '%_Right'
关于SQL 查询转置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21618114/