У меня есть таблица, в которой хранятся платежи для разных сотрудников каждую неделю вместе с некоторыми другими данными.
Например,
Employee ID | Upper Limit | ... | Week 1 | Week 2 | Week 3 | Week .. | ... | Week 52 | isActive |
8971239 70000 100 200 100 400 500 1
7823468 60000 200 300 100 200 400 1
8187119 20000 300 300 300 300 200 1
Когда мне нужно вычислить, например, СУММУ все недели для определенного c сотрудника, чтобы избежать написания следующего кода:
SELECT [Week 1] + [Week 2] + [Week 3] + ... + [Week 52] FROM tblWeeklySalaries where EmployeeID = 8971239
Я создаю строку внутри al oop, которая будет использоваться в качестве сценария для выполнения. Примерно так:
DECLARE @script nvarchar(max)
SET @script = 'SET @periodou = (SELECT '
WHILE @tempWeek <= @week
BEGIN
IF @tempWeek <= 52
BEGIN
SET @script = @script + 'ISNULL([Week ' + CONVERT(NVARCHAR, @tempWeek) + '], 0) +'
END
SET @tempWeek = @tempWeek + 1
END
SET @script = LEFT(@script, LEN(@script) - 1)
SET @script = @script + ' AS [Salary] FROM tblWeeklySalaries
WHERE [EmployeeID ] = ' + CONVERT(NVARCHAR, @EmployeeID)
Однако мне это не нравится, поскольку создание строки нелегко обрабатывать, и во многих случаях она усложняется в более требовательных сценариях.
Таким образом, я Я ищу способ добавить, например, ряд столбцов в таблице c. Что-то вроде
SELECT (COLUMNS(4, 56) FROM INFORMATION.SCHEMA WHERE TABLE_NAME = 'tblWeeklySalaries') FROM tblWeeklySalaries where EmployeeID = 8971239
Есть совет? Большое спасибо