Sql 将列转换为行

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 -----------------------------

在SQLServer中,我编写了以下查询

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进行简单计数。非常感谢,两个查询都有帮助