这是我的查询
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多个" Count' s",所以代替50个colums,id就像他们每个都显示为一行。
我尝试了一些PIVOT'但通常错误的列[HW]上的错误不包含在PIVOT中。
有更简单的方法吗?
答案 0 :(得分:0)
我会在表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%';
这将为这两个计数记录现有记录的正确别名。要持续执行此操作,您可以每次输入数据,或通过触发器自动填充数据。 (取决于表格的填充方式)。你可以添加一个触发器来总是用给定其他值的正确别名填充列,对于你将要做的所有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%'
(对于您给出的2个示例计数)。但我会以第一种方式做到这一点。
答案 1 :(得分:0)
尝试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;