我已经离开数据库游戏一段时间了,所以我有点生疏,但最近我遇到了以下问题,我认识的其他任何人都无法帮助我:
之前:
nm, lt, size
1, a, sm
1, b, lg
1, a, sm
1, b, lg
2, a, sm
2, a, lg
后:
num, let, sm, lg
1, a, 2, 0
1, b, 0, 2
2, a, 1, 1
我的数据类似于上面的例子。 尺寸列只能是两个值中的一个。我需要一个查询来将 nm 和 lt 列视为复合键。也就是说,每个组合应该是唯一的,即使它们是分开的,并且相应的大小值的计数应该放在它们各自的列中。
我的示例和我的实际数据库之间的唯一区别是 nm 和 lt 列的格式,它们包含更大的数字,导致超过5,000个唯一组合,以及有大约100万行需要记录并放在 lg 和/或 sm 列中。
如果我的解释有点复杂,我很抱歉,希望这个例子足够了。任何帮助或见解将不胜感激。
答案 0 :(得分:0)
select nm,
lt,
SUM(case when size = 'sm' then 1 else 0 end) as 'sm',
SUM(case when size = 'lg' then 1 else 0 end) as 'lg'
from testtable
group by nm,lt;