Как можно показать одну строку в строках, в которой каждая строка содержит имя столбца, а другая содержит значение? - PullRequest
2 голосов
/ 27 сентября 2010

У меня есть таблица, которая содержит около 60 столбцов, и если я пишу запрос на выборку в анализаторе запросов, чтобы получить строку, он показывает ее, и я должен прокрутить, чтобы отобразить данные.
Как получить одну строку, в которой онотображается как строка 60, каждая строка содержит 2 столбца, один для имени столбца и другой для значения
Например, Select * from table where id = 1 по умолчанию отображается как

ID Col1  Col2  Col3 Col4 Col5 ...... Col60  
1  v1    v2    v3   v4   v5   ...... v60

Я хочу, чтобы он отображался как

ID    1  
Col1  v1  
Col2  v2  
Col3  v3
...  
Col60 v60

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Хранимая процедура, описанная ниже, делает то, что вам нужно

CREATE PROCEDURE [dbo].[Rotat]
    -- Add the parameters for the stored procedure here
     @Where nvarchar(max),
     @tableName nvarchar(max)
AS
BEGIN

Declare @SqlQuery nvarchar(max),@ColumnName nvarchar(255)
DECLARE @TempTable TABLE 
( 
      ID int IDENTITY(1,1) , 
      ColumnName nvarchar(255), 
      ColumnValue ntext 
)


INSERT INTO @TempTable (ColumnName)
    SELECT      column_name
    FROM information_schema.columns
    WHERE table_name = @tableName 

Declare @index int
Set @index = 1;  

Declare @Count int
Select @Count = Count(ID) from @TempTable
declare @columnValue  nvarchar(255)
declare @paraDef nvarchar(max)
declare @string nvarchar(max)

WHILE @index <= @Count 
BEGIN
    Select @ColumnName = ColumnName from @TempTable where id = @index
    set @string ='select @ret= cast('+ @ColumnName + ' AS nvarchar(255) )  
        from '+@tableName+' WHERE ' + @Where

    set  @paraDef=N'@ret nvarchar(255) output'

    EXECUTE sp_executesql @string, @paraDef,@ret=@ColumnValue  output

    UPDATE  @TempTable 
    SET     ColumnValue = @columnValue
    WHERE   ID =@index

    Set @index = @index + 1
END

Select * from @TempTable

END

Просто назовите это именем таблицы проходов и вашим условием, которое вернет одну строку, например

EXEC    [dbo].[Rotat]
        @Where = 'UserID = 123456',
        @tableName = 'Users'
0 голосов
/ 27 сентября 2010

Если вам нужна очень быстрая техника только для просмотра транспонированных данных (как кажется из вашего вопроса), попробуйте скопировать и вставить вывод из сетки результатов в Excel, затем скопировать данные Excel и использовать специальную вставку для транспонирования вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...