Paul Nielsen
pauln at sqlserverbible.com
Sat Feb 2 12:03:53 CST 2008
USE TempDB CREATE TABLE AgeCount ( Presence_of_adults_age_65_74_specific INT, Presence_of_adults_age_55_64_specific INT, Presence_of_adults_age_45_54_specific INT ) go INSERT AgeCount VALUES (1 ,2 ,3 ) INSERT AgeCount VALUES (1 ,3 ,3 ) INSERT AgeCount VALUES (1 ,2 ,2 ) INSERT AgeCount VALUES (1 ,2 ,1 ) INSERT AgeCount VALUES (2 ,1 ,2 ) INSERT AgeCount VALUES (1 ,3 ,1 ) INSERT AgeCount VALUES (2 ,2 ,2 ) INSERT AgeCount VALUES (3 ,3 ,1 ) INSERT AgeCount VALUES (2 ,2 ,1 ) INSERT AgeCount VALUES (1 ,3 ,1 ) INSERT AgeCount VALUES (2 ,3 ,1 ) -- Case Expression Method SELECT AgeRange, SUM(Case Code WHEN 1 THEN Cnt ELSE 0 END) AS Cnt1, SUM(Case Code WHEN 2 THEN Cnt ELSE 0 END) AS Cnt2, SUM(Case Code WHEN 3 THEN Cnt ELSE 0 END) AS Cnt3 FROM (SELECT '65_74' as AgeRange, Presence_of_adults_age_65_74_specific as Code, Count(*) as Cnt FROM AgeCount GROUP BY Presence_of_adults_age_65_74_specific union SELECT '55_64', Presence_of_adults_age_55_64_specific, Count(*) FROM AgeCount GROUP BY Presence_of_adults_age_55_64_specific union SELECT '45_54', Presence_of_adults_age_45_54_specific, Count(*) FROM AgeCount GROUP BY Presence_of_adults_age_45_54_specific) as Normalized GROUP BY AgeRange ORDER BY AgeRange -- Pivot Method SELECT AgeRange, [1] AS Cnt1, [2] AS Cnt2, [3] AS Cnt3 FROM (SELECT '65_74' as AgeRange, Presence_of_adults_age_65_74_specific as Code, Count(*) as Cnt FROM AgeCount GROUP BY Presence_of_adults_age_65_74_specific union SELECT '55_64', Presence_of_adults_age_55_64_specific, Count(*) FROM AgeCount GROUP BY Presence_of_adults_age_55_64_specific union SELECT '45_54', Presence_of_adults_age_45_54_specific, Count(*) FROM AgeCount GROUP BY Presence_of_adults_age_45_54_specific) as Normalized PIVOT (SUM(Cnt) FOR Code IN ([1],[2],[3]) ) as Pvt ORDER BY AgeRange HTH, -Paul -----Original Message----- From: dba-sqlserver-bounces at databaseadvisors.com [mailto:dba-sqlserver-bounces at databaseadvisors.com] On Behalf Of jwcolby Sent: Saturday, February 02, 2008 9:48 AM To: 'Access Developers discussion and problem solving'; 'Discussion concerning MS SQL Server' Subject: [dba-SQLServer] SQL Server Pivot I have a bunch of columns that break out ages into bands. For example: Presence_of_adults_age_65_74_specific Presence_of_adults_age_55_64_specific Presence_of_adults_age_45_54_specific etc Each column has codes 1,2,3 I need counts of each column, for each value column Cnt1 Cnt2 Cnt3 65_74 45 3 23 55_64 103 48 211 45_54 20 1 49 etc I think the Pivot statement is going to do that for me but I can't seem to wrap my mind around the syntax. Can anyone point me to a web page that clearly explains this or simply write a SQL statement that does this? Thanks John W. Colby Colby Consulting www.ColbyConsulting.com _______________________________________________ dba-SQLServer mailing list dba-SQLServer at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/dba-sqlserver http://www.databaseadvisors.com __________ NOD32 2845 (20080202) Information __________ This message was checked by NOD32 antivirus system. http://www.eset.com