我有一张桌子,下面已经简化了。它实际上可以扩展到Type60
编号| 类型1 | Type2 | Type3 | 类型4 ------------------------------------------------- ----- 1 | 1 | 1 | 1 | 0 2 | 1 | 1 | 1 | 0 3 | 1 | 1 | 1 | 0 4 | 0 | 2 | 0 | 1 5 | 0 | 2 | 1 | 0 6 | 0 | 2 | 0 | 1 7 | 1 | 1 | 1 | 0 8 | 1 | 1 | 0 | 1 9 | 1 | 2 | 1 | 0 10 | 0 | 2 | 0 | 1个
我想要的输出如下所示(扩展到Name60)
姓名| 价值| CountOfValue ----------------------------------- Name1 | 0 | 4 名称1 | 1 | 6名称2 | 1 | 5名称2 | 2 | 5名称3 | 0 | 6名称3 | 1 | 4 名称4 | 0 | 4 名称4 | 1 | 6
为了到达那里,我一直在做:
选择“名称1”作为名称,类型1,计数(数字) 从表1 组由类型1 工会 选择“名称2”作为名称,类型2,计数(数字) 从表1 由类型2组 联合 选择“NAME3”作为名称,类型3,COUNT(数) 从表1 通过的Type3组 联合 选择“NAME4”作为名称,类型4,计数(数字) 从表1 组由Type4的
直至Name60等
这需要一段时间才能运行,
有没有人更有效(更快)的方法来做同样的事情?
谢谢,加里
您可以尝试UNPIVOT。
SELECT Name, [values] AS Value, Count(*) AS CountOfValue
FROM
(
SELECT REPLACE([Type], 'Type', 'Name') AS Name, [values]
FROM #testPivot
UNPIVOT ([values] FOR [type] IN
(Type1, Type2, Type3, Type4) -- ETC to Type60
) AS unpvt
) AS test
GROUP BY Name, [values]
ORDER BY Name, Value
您仍然必须在UNPIVOT中放入所有Type1到Type 60。签出PIVOT和UNPIVOT。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句