Sql 将列转换为行
在SQLServer中,我编写了以下查询Sql 将列转换为行,sql,sql-server,Sql,Sql Server,在SQLServer中,我编写了以下查询 SELECT COUNT(DISTINCT Category) AS Categories, COUNT(DISTINCT [Order Number]) AS Orders, COUNT(DISTINCT Product) AS Products FROM Associate 输出结果如下 Categories Orders Products -----------------------------
SELECT
COUNT(DISTINCT Category) AS Categories,
COUNT(DISTINCT [Order Number]) AS Orders,
COUNT(DISTINCT Product) AS Products
FROM
Associate
输出结果如下
Categories Orders Products
---------------------------------
17 13050 37
但我想要这样的结果
#Object# | #Count#
------------+-----------
Categories | 17
Orders | 13050
Products | 37
有人能帮上忙吗?您可以使用
union all
或取消打印结果:
with c as (
select count(distinct Category) AS Categories,
count(distinct [Order Number]) AS Orders,
count(distinct Product) AS Products
from Associate
)
select v.*
from c cross apply
(values ('Categories', Categories),
('Orders', Orders),
('Products', Products)
) v(which, cnt);
这通常是最有效的选择。但是,count(distinct)
相当昂贵,因此对表进行三次扫描可能不会对性能造成太大影响。因此:
select 'Categories' as which, count(distinct Category) as cnt
from Associate union all
select 'Orders', count(distinct [Order Number])
from Associate union all
select 'Products', count(distinct Product);
使用group by进行简单计数。非常感谢,两个查询都有帮助