IF (OBJECT_ID(N'tempdb..#ShoeStockCatalog', N'U') IS NOT NULL)
BEGIN
DROP TABLE #ShoeStockCatalog;
END
CREATE TABLE #ShoeStockCatalog
(
[Code] BIGINT NOT NULL,
[CategoryName] SYSNAME,
[ColorName] SYSNAME,
[SizeSpecification] INT NOT NULL,
PRIMARY KEY ([Code], [CategoryName], [ColorName], [SizeSpecification])
);
INSERT INTO #ShoeStockCatalog ([Code], [CategoryName], [ColorName], [SizeSpecification])
VALUES (1, N'Male', N'Red', 37),
(1, N'Male', N'Red', 38),
(1, N'Male', N'Red', 39),
(1, N'Male', N'Red', 40),
...
;
DECLARE @DistinctAvailableSizes TABLE
(
[SizeSpecification] INT PRIMARY KEY
);
INSERT INTO @DistinctAvailableSizes ([SizeSpecification])
SELECT DISTINCT [SizeSpecification]
FROM #ShoeStockCatalog;
DECLARE @distinctSizes NVARCHAR(MAX), @selectColumns NVARCHAR(MAX);
SET @distinctSizes =
STUFF(
(SELECT N',[' + CAST([SizeSpecification] AS SYSNAME) + N']' AS "data()"
FROM @DistinctAvailableSizes
FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'),
1, 1, N'');
SET @selectColumns =
STUFF(
(SELECT N',COALESCE([' + CAST([SizeSpecification] AS SYSNAME) +
N'], 0) AS [' +
CAST([SizeSpecification] AS SYSNAME) +
N']' AS "data()"
FROM @DistinctAvailableSizes
FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'),
1, 1, N'');
DECLARE @sql NVARCHAR(MAX) = N'';
SET @sql = @sql +
N'SELECT [Code], [CategoryName], [ColorName], ' + @selectColumns +
N' FROM #ShoeStockCatalog t1 ' +
N' PIVOT (COUNT([SizeSpecification]) FOR [SizeSpecification] IN (' + @distinctSizes + N')) AS t2';
EXEC sys.sp_executesql @sql;
BEGIN
DROP TABLE #ShoeStockCatalog;
END
CREATE TABLE #ShoeStockCatalog
(
[Code] BIGINT NOT NULL,
[CategoryName] SYSNAME,
[ColorName] SYSNAME,
[SizeSpecification] INT NOT NULL,
PRIMARY KEY ([Code], [CategoryName], [ColorName], [SizeSpecification])
);
INSERT INTO #ShoeStockCatalog ([Code], [CategoryName], [ColorName], [SizeSpecification])
VALUES (1, N'Male', N'Red', 37),
(1, N'Male', N'Red', 38),
(1, N'Male', N'Red', 39),
(1, N'Male', N'Red', 40),
...
;
DECLARE @DistinctAvailableSizes TABLE
(
[SizeSpecification] INT PRIMARY KEY
);
INSERT INTO @DistinctAvailableSizes ([SizeSpecification])
SELECT DISTINCT [SizeSpecification]
FROM #ShoeStockCatalog;
DECLARE @distinctSizes NVARCHAR(MAX), @selectColumns NVARCHAR(MAX);
SET @distinctSizes =
STUFF(
(SELECT N',[' + CAST([SizeSpecification] AS SYSNAME) + N']' AS "data()"
FROM @DistinctAvailableSizes
FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'),
1, 1, N'');
SET @selectColumns =
STUFF(
(SELECT N',COALESCE([' + CAST([SizeSpecification] AS SYSNAME) +
N'], 0) AS [' +
CAST([SizeSpecification] AS SYSNAME) +
N']' AS "data()"
FROM @DistinctAvailableSizes
FOR XML PATH(N''), TYPE).value(N'.', N'NVARCHAR(MAX)'),
1, 1, N'');
DECLARE @sql NVARCHAR(MAX) = N'';
SET @sql = @sql +
N'SELECT [Code], [CategoryName], [ColorName], ' + @selectColumns +
N' FROM #ShoeStockCatalog t1 ' +
N' PIVOT (COUNT([SizeSpecification]) FOR [SizeSpecification] IN (' + @distinctSizes + N')) AS t2';
EXEC sys.sp_executesql @sql;











