Я полагаю, что SQL-сервер требует от вас явного имени каждого столбца в сводной таблице. Итак, следующий фрагмент вашего исходного запроса не разрешен:
for client_code in (select client_code from clients)
Вы должны были бы назвать каждый клиентский код явно.
Редактировать: Вот пример поворота, чтобы соответствовать вашему примеру:
WITH Permit (Usr, Client) AS
(
SELECT 1, 'a' UNION ALL
SELECT 1, 'b' UNION ALL
SELECT 1, 'c' UNION ALL
SELECT 2, 'a' UNION ALL
SELECT 2, 'd' UNION ALL
SELECT 3, 'a' UNION ALL
SELECT 3, 'd' UNION ALL
SELECT 3, 'e' UNION ALL
SELECT 3, 'f'
)
SELECT p.*
FROM Permit
PIVOT (MAX(Client) FOR Client IN (a, b, c, d, e, f)) p
Редактировать: вот опция динамического SQL; Вы могли бы поместить это в TVF:
--source table
CREATE TABLE #Permit (Usr int, Client char(1));
INSERT INTO #Permit (Usr, Client)
SELECT 1, 'a' UNION ALL
SELECT 1, 'b' UNION ALL
SELECT 1, 'c' UNION ALL
SELECT 2, 'a' UNION ALL
SELECT 2, 'd' UNION ALL
SELECT 3, 'a' UNION ALL
SELECT 3, 'd' UNION ALL
SELECT 3, 'e' UNION ALL
SELECT 3, 'f';
DECLARE @Command nvarchar(max);
SET @Command = '';
--prepare the list of columns
SELECT @Command = @Command + ', ' + CONVERT(nvarchar(10), Client)
FROM (SELECT DISTINCT Client FROM #Permit) x;
--chop the extra leading comma off
SET @Command = SUBSTRING(@Command, 3, LEN(@Command));
--prepare the rest of the pivot command
SET @Command = N'
SELECT p.*
FROM #Permit
PIVOT (MAX(Client) FOR Client IN (' + @Command + ')) p';
--execute the command
EXEC sp_executesql @Command;
DROP TABLE #Permit;