2014-04-12 21 views
1

這裏是我的查詢如何在沒有列的SQL中使用PIVOT?

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個colums,像他們的ID來顯示爲一行中的每個。

我已經嘗試了少數支點的,但通常錯誤對柱而出[硬件]不包含在PIVOT內。

是否有更簡單的方法?

回答

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; 
+0

最好的,我完全錯過了加入SELECT CountType,比他們(或不旋轉)旋轉MyCounts – user3413377

0

我將列添加到您的表v_Network_DATA_Serialized指示相關骨料的名字。比方說,如一個例子e,「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%' 

(對於你給出的2個例子)。但我會以第一種方式去做。