SELECT
COUNT(*) as total,
(SELECT count(*) FROM filename WHERE type='MI' AND inv_date >= @EndDate) as moneyinvoice,
(SELECT count(*) FROM filename WHERE type='WP' AND inv_date >= @EndDate) as wip,
(SELECT count(*) FROM filename WHERE type='CN' AND inv_date >= @EndDate) as cancel
FROM filename
WHERE inv_date >= @EndDate

or to make it look a little neater, but do the same:

DELCARE @EndDate DateTime
SET @EndDate = '11/30/2003'

SELECT
(SELECT count(*) FROM filename WHERE AND inv_date>= @EndDate) as total,
(SELECT count(*) FROM filename WHERE type='MI' AND inv_date >= @EndDate) as moneyinvoice,
(SELECT count(*) FROM filename WHERE type='WP' AND inv_date >= @EndDate) as wip,
(SELECT count(*) FROM filename WHERE type='CN' AND inv_date >= @EndDate) as cancel

SELECT COUNT(*) as Totals,
CASE WHEN GROUPING(Type) = 1 THEN 'Total'
ELSE Type
END as Type
FROM dbo.FileName
GROUP BY Type WITH ROLLUP

Quick to code and will not be limitted to only values you code for. Of course if you decide to return more complete names from the database (ie. moneyinvoice) you will want to add it into the second part of the case statement as another case statement.
-- Messorian