tsk tsk.
I had some time after work to help ya out. Honestly the best way to go is dynamic sql. I gave you an explaination about piviot so you should be good on how to use it. Dyanmic sql is a beast of its own though, hope you're able to swap out the tables without to much trouble
CREATE TABLE #TEMP
(
SUB_DISTRICT varchar(100) ,
LOCATION_TYPE varchar(100),
Date_type date
)
INSERT INTO #TEMP
VALUES('Paris', 'Inland', '2012/1/1'),
('Nigeria', 'Inland', '2012/1/2'),
('Brasil', 'Coast', '2012/6/3'),
('Paris', 'Inland', '2012/2/2'),
('Nigeria', 'Inland', '2012/5/5'),
('Brasil', 'Coast', '2012/6/3'),
('Texas', 'Inland', '2012/12/12'),
('Paris', 'Inland', '2012/11/11'),
('Nigeria', 'Mountain', '2012/8/8'),
('Nigeria', 'Mountain', '2012/10/10'),
('Texas', 'Inland', '2012/10/12'),
('Texas', 'Inland', '2012/9/12'),
('Texas', 'Inland', '2012/1/1')
DECLARE @cols10 VARCHAR(2000)
SELECT @cols10 = COALESCE(@cols10 + ',[' + 'Q' + DATE_TYPE + ']','[' + 'Q' + DATE_TYPE + ']')
FROM (
SELECT DISTINCT CONVERT(VARCHAR(10),(DATEPART(Quarter,DATE_TYPE))) DATE_TYPE
FROM #TEMP
GROUP BY DATE_TYPE)LA
DECLARE @SQL10 VARCHAR(4000)
SET @SQL10 = '
SELECT SUB_DISTRICT,
LOCATION_TYPE,
'+ @cols10 +'
FROM (SELECT
SUB_DISTRICT,
LOCATION_TYPE,
''Q''+ CONVERT(VARCHAR(10),(DATEPART(Quarter,DATE_TYPE)))DATE_TYPE
FROM #TEMP) AS A
PIVOT (COUNT(DATE_type) FOR DATE_type IN ('+ @cols10 +') )P'
exec (@SQL10)
print @SQL10