T-SQL多列转单列存入临时表及统计次数问题求助
嘿,我来帮你搞定这个多列转单列的问题~你用UNPIVOT的思路完全没问题,只是语句里的SELECT部分有点小疏漏,导致没得到想要的结果。下面给你一步步梳理正确的做法:
第一步:把所有数字存入单列临时表
#TEMP 你之前的UNPIVOT语句里,还在SELECT原来的10列,但我们实际只需要UNPIVOT后生成的Number列。修正后可以直接把结果写入临时表:
SELECT Number INTO #TEMP FROM YourTableName -- 记得替换成你的实际表名哦 UNPIVOT ( Number FOR nrs IN (nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10) ) AS unpivoted_data;
这个写法里,INTO #TEMP会自动帮你创建临时表,列就是我们需要的Number,完美实现单列存储的需求。
如果你的数据库环境不支持直接用INTO创建临时表,也可以先手动建表再插入:
CREATE TABLE #TEMP (Number INT); INSERT INTO #TEMP (Number) SELECT Number FROM YourTableName UNPIVOT ( Number FOR nrs IN (nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10) ) AS unpivoted_data;
第二步:统计每个数字的出现次数
这一步确实很简单,只需要对临时表做分组统计就行:
SELECT Number, COUNT(*) AS OccurrenceCount FROM #TEMP GROUP BY Number ORDER BY Number; -- 按数字排序,方便查看
另外,如果你不想绕路存临时表,也可以一步到位直接统计,省去临时表的步骤:
SELECT Number, COUNT(*) AS OccurrenceCount FROM YourTableName UNPIVOT ( Number FOR nrs IN (nr1, nr2, nr3, nr4, nr5, nr6, nr7, nr8, nr9, nr10) ) AS unpivoted_data GROUP BY Number ORDER BY Number;
总结一下,你之前的问题就是SELECT的时候没只取Number列,UNPIVOT会把原表的每一行拆成10行(对应10个列的值),所以只需要提取这个转换后的单列就可以啦~
内容的提问来源于stack exchange,提问作者Zaur
相关产品推荐
相关产品推荐

