try something like thisDECLARE @T TABLE( Priext INT, field1 VARCHAR(100), field2 VARCHAR(100), loggeddate VARCHAR(100))INSERT INTO @TSELECT 206, '00:07;54', NULL, '20080927__P9P1112223333' UNION ALLSELECT 206, '00:14;30', '00;07', '20080927' UNION ALLSELECT 206, '00:03;23', NULL, '20080927__P9P1112223333' UNION ALLSELECT 208, '00:11;19', '00;15', '20080927' UNION ALLSELECT 206, '00:00;53', NULL, '20080928__P9P1112223333'SELECT DISTINCT SUBSTRING(T.loggeddate, 1, 8) AS 'date' , T.Priext AS 'ext' , ISNULL(TIN.Inbound, 0) AS 'inbound calls' , ISNULL(TOT.Outbound, 0) AS 'outbound calls'FROM @T TLEFT JOIN ( SELECT SUBSTRING(loggeddate, 1, 8) AS 'date', Priext AS 'ext', COUNT(Priext) AS 'Inbound' FROM @T WHERE field2 IS NOT NULL GROUP BY SUBSTRING(loggeddate, 1, 8), Priext ) TIN ON T.Priext = TIN.ext AND TIN.date = SUBSTRING(T.loggeddate, 1, 8)LEFT JOIN ( SELECT SUBSTRING(loggeddate, 1, 8) AS 'date', Priext AS 'ext', COUNT(Priext) AS 'Outbound' FROM @T WHERE field1 IS NOT NULL AND field2 IS NULL GROUP BY SUBSTRING(loggeddate, 1, 8), Priext ) TOT ON T.Priext = TOT.ext AND TOT.date = SUBSTRING(T.loggeddate, 1, 8)