I have a table ProductStatusTable that contains the following data. LOCATION|PRODUCT|SERIALNUMBER|STATUSCODE|B1------|MIRROR-|M1234-------|0---------B1------|MIRROR-|M8379-------|1---------B1------|MIRROR-|M2277-------|3---------B1------|MIRROR-|M8878-------|3---------B1------|MIRROR-|M3355-------|4---------MAIN----|MIRROR-|M7454-------|1---------MAIN----|MIRROR-|M0023-------|2---------MAIN----|TABLE--|T3645-------|0---------MAIN----|TABLE--|T1837-------|4---------MAIN----|TABLE--|T9432-------|4---------I have a query that sorts of gets it where I wanted - counting the individual statuses:SELECT Location, Product, COUNT(StatusCode) As CountFROM ProductStatusTableGROUP BY Location, Product, StatusCodeORDER BY Location, Product, StatusCodeTo yield:LOCATION|PRODUCT|COUNT|B1------|MIRROR-|----1B1------|MIRROR-|----1B1------|MIRROR-|----2B1------|MIRROR-|----1MAIN----|MIRROR-|----1MAIN----|MIRROR-|----1MAIN----|TABLE--|----1MAIN----|TABLE--|----2But, alas, this is not what I really want to do. I want to do something more complicated, and am not quite sure how to approach it. First, the status codes stand for something: codes 0 and 1 = IN STOCK, code 2 = BROKEN, code 3 = STOLEN, and code 4 = SOLD.I want to yield this:LOCATION|PRODUCT|#IN STOCK|#BROKEN|#STOLEN|#SOLD|B1------|MIRROR-|--------2|------0|------2|----1|MAIN----|MIRROR-|--------1|------1|------0|----0|MAIN----|TABLE--|--------1|------0|------0|----2|Here is the script to create the data:USE [Northwind]GO/****** Object: Table [dbo].[ProductStatusTable] Script Date: 07/03/2012 10:36:37 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[ProductStatusTable]( [Location] [varchar](10) NULL, [Product] [varchar](20) NULL, [SerialNumber] [varchar](20) NULL, [StatusCode] [int] NULL) ON [PRIMARY]GOSET ANSI_PADDING OFFGOINSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'B1', N'MIRROR', N'M1234', 0)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'B1', N'MIRROR', N'M8379', 1)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'B1', N'MIRROR', N'M3355', 4)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'B1', N'MIRROR', N'M2277', 3)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'B1', N'MIRROR', N'M8878', 3)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'MAIN', N'MIRROR', N'M0023', 2)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'MAIN', N'MIRROR', N'M7454', 1)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'MAIN', N'TABLE', N'T1837', 4)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'MAIN', N'TABLE', N'T9432', 4)INSERT [dbo].[ProductStatusTable] ([Location], [Product], [SerialNumber], [StatusCode]) VALUES (N'MAIN', N'TABLE', N'T3645', 0)