Добавить комментарий - CodeHelper

Добавить комментарий

Вообще если количество строк не фиксировано и нужно использовать один селект, то это интересный вопрос. А если же нет, то можно сформировать динамический запрос и выполнить его, где-то так

-- таблица ключей
DECLARE @keys TABLE(Id INT, Value NVARCHAR(MAX));
INSERT INTO @keys 
VALUES (1, '1'), (2, '2'), (3, '3');

-- таблица значений
DECLARE @values TABLE(Id INT, Value NVARCHAR(MAX));
INSERT INTO @values 
VALUES (1, '1'), (3, '3');

-- работаем через курсор
DECLARE cur CURSOR LOCAL FAST_FORWARD FOR
SELECT k.Value AS [Key],
    v.Value AS [Value]
FROM @keys k
LEFT JOIN @values v
ON k.Id = v.Id;

DECLARE @query NVARCHAR(MAX) = 'SELECT ',
    @key NVARCHAR(MAX),
    @value NVARCHAR(MAX);

OPEN cur;

FETCH NEXT FROM cur
INTO @key, @value;

-- формируем строку запроса
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @query = @query + CASE WHEN @value IS NULL THEN 'NULL' ELSE '''' + @value + '''' END + ' AS [' + @key + ']';

    FETCH NEXT FROM cur
    INTO @key, @value;

    IF  @@FETCH_STATUS = 0 
    	SET @query = @query + ', ';
END;

CLOSE cur;
DEALLOCATE cur;

-- выполняем запрос
EXEC (@query);
Внимание! Вы собираетесь отправить информацию от имени анонимного пользователя.
v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.