如何在没有列的SQL中透视?

如何在没有列的SQL中透视?,sql,sql-server,Sql,Sql Server,这是我的问题 SELECT Count(case when IPAddress0 like '10.172.%' then 1 else null end) as HW ,Count(case when DNSHostName0 like '50%' then 1 else null end) as HN From v_Network_DATA_Serialized (大约还有50个“计数”,所以我希望它们显示为一行,而不是50个列 我尝试了一些PIVOT,但通常[HW]列上的

这是我的问题

  SELECT 
  Count(case when IPAddress0 like '10.172.%' then 1 else null end) as HW
 ,Count(case when DNSHostName0 like '50%' then 1 else null end) as HN
  From v_Network_DATA_Serialized
(大约还有50个“计数”,所以我希望它们显示为一行,而不是50个列

我尝试了一些PIVOT,但通常[HW]列上的错误不包含在PIVOT中


有没有更简单的方法?

我会在表v_Network_DATA_Serialized中添加一列,指示相关聚合的名称。例如,“agg_alias”

然后,更新现有记录,使其包含正确的别名。举两个例子,给出示例数据:

update v_Network_DATA_Serialized set agg_alias = 'HW' where IPAddress0 like '10.172.%';
update v_Network_DATA_Serialized set agg_alias = 'HN' where DNSHostName0 like '50%';
这将仅为这2个计数记录现有记录的正确别名。要持续进行此操作,您可以每次输入数据,或通过触发器自动填充数据。(取决于填充表的方式)。您可以添加一个触发器,以便在给定其他值的情况下,始终使用正确的别名填充列,用于所有50个左右的计数

之后,执行此查询将非常简单:

select      agg_alias
            , count(*)
from        v_Network_DATA_Serialized
group by    agg_alias
作为另一种方法,您可以在一个查询中计算50个联合的每个计数,例如

select count(*) as counter, 'HW' as agg_alias
  from v_Network_DATA_Serialize
 where IPAddress0 like '10.172.%'
union all
select count(*) as counter, 'HN' as agg_alias
  from v_Network_DATA_Serialized
 where DNSHostName0 like '50%'
(对于您给出的两个示例计数),但我会用第一种方法进行计算。

试试UNPIVOT

SELECT CountType, MyCounts
FROM
  (SELECT 
    Count(case when IPAddress0 like '10.172.%' then 1 else null end) as HW
    ,Count(case when DNSHostName0 like '50%' then 1 else null end) as HN
  FROM v_Network_DATA_Serialized) p
UNPIVOT
  (MyCounts FOR CountType IN
    (HW, HN)
) as up;

令人惊讶的是,我完全错过了添加SELECT CountType、MyCounts,而不是围绕它们旋转(或取消旋转)