Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Тогда, кроме оператора SUBSTRING во внутреннем запросе, нужно использовать оператор CUBE в промежуточном запросе (и поместить его в конструкцию WITH: https://stackoverflow.com/questions/12552288/sql-with-clause-example) и затем из этого промежуточного результата создать 16 таблиц, фильтруя по полю SUBSTRING и соединяя между собой по имени домена (FULL OUTER JOIN) и с таблицами, содержащими регион и управление. Или использовать OLAP-функции (если такие есть в MSSQL) Или пользоваться процедурными языками для перевода 1-мерной таблицы в 2-мерную. Что-то типа: WITH qry (mac_fin, domain, chk) AS ( SELECTmac_fin, domain, SUM(chk) as chk FROM( SELECT substring(MAC.MAC_Addresses0, 12, 1) AS mac_fin, SYS.Resource_Domain_OR_Workgr0 AS domain, COUNT(DISTINCT SYS.ResourceID) AS chk FROM v_R_System AS SYS LEFT OUTER JOIN v_RA_System_MACAddresses AS MAC ON SYS.ResourceID = MAC.ResourceID WHERE (SYS.Client0 = 1) AND (SYS.Resource_Domain_OR_Workgr0 IN ('GVC', 'MAIN', 'SVRW', 'ZRW', 'KBSH', 'ORW', 'KLGD', 'SKZD', 'GRW', 'KRW', 'WSR', 'SURW', 'NRR', 'ESRR', 'MSK', 'PVRR', 'SERWRZD', 'DVGD')) GROUP BY substring(MAC.MAC_Addresses0, 12, 1), SYS.Resource_Domain_OR_Workgr0) GROUP BY mac_fin, domain WITH CUBE) SELECT rzd.domain, q0.chk0, q1.chk1, ... и т.д. до qF.chkF FROM dbo.v_tmp_RZD_info rzd LEFT OUTER JOIN (SELECT domain, chk as chk0 FROM qry WHERE mac_fin = '0') q0 ON rzd.domain=q0.domain LEFT OUTER JOIN (SELECT domain, chk as chk1 FROM qry WHERE mac_fin = '1') q1 ON rzd.domain = q1.domain LEFT OUTER JOIN ... и т.д. до qF PS. сам я к MSSQL никакого отношения не имею, и ни разу на нём не программировал. Так что, в коде могут быть опечатки и ошибки. |