You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:57:52