Ссылка, предоставленная Kangkan, покажет вам, как это сделать, если вы заранее знали имена столбцов.Мы используем ту же логику, за исключением использования динамического SQL для построения оператора.В каждое поле необходимо включить 2 части: поле в операторе выбора и соответствующее объединение, чтобы получить значение ... поэтому нам нужно будет построить оператор из двух частей
Первое объявление3 переменные, чтобы построить это ... Я пойду с @select, @join и @sql для этого примера.Дайте переменным начальные значения
set @select = 'select user_id,'
set @join = 'from table t'
, теперь объявите и загрузите курсор с различными значениями в поле table.key.Я собираюсь использовать @field, поскольку переменная заполняется отдельным полем table.key.Затем выполните цикл по нему, создав две переменные:
set @select = @select + ', ' + @field + '.value as '+@field+'
set @join = @join + ' left join table ' + @field + 'on '+@field+'.key = t.key and and '+@field+'.user_id = t.user_id
(объединение предназначено для использования значения в @field в качестве псевдонима таблицы)
цикл по построению курсора из @выберите и @join.В конце цикла:
set @sql = @select + @join + 'where clause if you want'
exec @sql
Динамический SQL, созданный таким образом, может стать абсолютной болью для устранения неполадок (и получения правильных результатов) и открытия проблем безопасности ... но это единственный способ, которым я могуувидеть это выполненнымСледите за ограничением размера ваших переменных .... если у вас слишком много разных ключей, переменные становятся слишком большими.Извините, я не могу быть более точным с псевдо-этим ... вы обнаружите, что создание динамического SQL в SQL является кропотливым.