Динамическое создание столбца в SQL для каждой даты: методы и примеры кода

Чтобы создать новый столбец для каждой даты в SQL, вы можете использовать несколько методов в зависимости от вашей системы базы данных и требований. Вот несколько примеров:

Метод 1: использование динамического SQL

DECLARE @dateColumn NVARCHAR(50)
DECLARE @sql NVARCHAR(MAX)
DECLARE dateCursor CURSOR FOR
SELECT DISTINCT YourDateColumn
FROM YourTable
OPEN dateCursor
FETCH NEXT FROM dateCursor INTO @dateColumn
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @sql = 'ALTER TABLE YourTable ADD [' + CONVERT(NVARCHAR(10), @dateColumn, 120) + '] INT NULL'
    EXEC sp_executesql @sql
    FETCH NEXT FROM dateCursor INTO @dateColumn
END
CLOSE dateCursor
DEALLOCATE dateCursor

Метод 2: использование предложения PIVOT

DECLARE @columns NVARCHAR(MAX)
DECLARE @sql NVARCHAR(MAX)
SET @columns = ''
SELECT @columns = @columns + QUOTENAME(CONVERT(NVARCHAR(10), YourDateColumn, 120)) + ','
FROM YourTable
GROUP BY YourDateColumn
SET @columns = LEFT(@columns, LEN(@columns) - 1)
SET @sql = 'ALTER TABLE YourTable ADD ' + @columns + ' INT NULL'
EXEC sp_executesql @sql

Метод 3: использование CROSS JOIN и DISTINCT

DECLARE @dateColumns TABLE (ColumnName NVARCHAR(50))
INSERT INTO @dateColumns (ColumnName)
SELECT DISTINCT CONVERT(NVARCHAR(10), YourDateColumn, 120)
FROM YourTable
DECLARE @sql NVARCHAR(MAX)
SELECT @sql = COALESCE(@sql + ',', '') + 'ALTER TABLE YourTable ADD ' + QUOTENAME(ColumnName) + ' INT NULL'
FROM @dateColumns
EXEC sp_executesql @sql

Эти методы демонстрируют динамическое создание столбцов на основе различных дат, присутствующих в определенном столбце таблицы.