2013-07-26 2 views
2

В настоящее время у меня есть фрагмент кода, который поворачивает таблицу, в которой данные строки вставляются динамически. Код показан ниже:Извлечение данных из таблицы в SQL Server

CREATE TABLE Table1 
    ([empname] varchar(6), [empqual] varchar(10), [emprank] int, [empexp] int) 


INSERT INTO Table1 
    ([empname], [empqual], [emprank], [empexp]) 
VALUES 
    ('Joyce', 'UNIVERSITY', 1, 11), 
    ('Angela', 'MASTERS', 2, 10), 
    ('Lily', 'MASTERS', 3, 9), 
    ('Sasha', 'UNIVERSITY', 3, 9), 
    ('Harry', 'UNIVERSITY', 3, 9) 

DECLARE @cols AS NVARCHAR(MAX), 
@query AS NVARCHAR(MAX) 

SET @cols = STUFF((SELECT distinct ',' + 'Column' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) 
     FROM Table1 c 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 

SET @query = ' 
SELECT * 
FROM 
(
    SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
    CONVERT(VARCHAR,empname) as e 
    FROM Table1 
) p 
PIVOT 
(
    MAX (e) 
    FOR Columns IN 
    ( 
    ' + @cols + ') 
    ) as pvt 

UNION 

SELECT * 
FROM 
(
    SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
    CONVERT(VARCHAR,empqual) as e 
    FROM Table1 
) p 
PIVOT 
(
    MAX (e) 
    FOR Columns IN 
    ( 
    ' + @cols + ') 
    ) as pvt 

UNION 

SELECT * 
FROM 
(
    SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
    CONVERT(VARCHAR,emprank) as e 
    FROM Table1 
) p 
PIVOT 
(
    MAX (e) 
    FOR Columns IN 
    ( 
     ' + @cols + ') 
    ) as pvt 

UNION 

SELECT * 
FROM 
(
    SELECT ''Column'' + CONVERT(VARCHAR,Row_Number() OVER (Order By emprank)) AS Columns, 
    CONVERT(VARCHAR,empexp) as e, 
    FROM Table1 
) p 
PIVOT 
(
    MAX (e) 
    FOR Columns IN 
    ( 
     ' + @cols + ') 
    ) as pvt 
' 
EXECUTE (@query) 

Результат выше кода, как показано ниже:

Column1 Column2 Column3 Column4 Column5 
    1   2   3   3   3 
    11   10   9   9   9 
    Joyce  Angela  Lily  Sasha  Harry 
UNIVERSITY MASTERS MASTERS UNIVERSITY UNIVERSITY 

Теперь мое приложение требует, чтобы отобразить каждый из столбцов в этой таблице отдельно, т.е. каждый столбцов , а не строки этой таблицы, необходимо экспортировать из этой таблицы и передать, возможно, во временную таблицу, из которой она может быть легко отображена.

Мне хорошо известно, что реляционные БД сконструированы таким образом, чтобы рассматривать строки, а не столбцы, как отдельные объекты. Тем не менее, меня ограничивает приложение, в котором я работаю, для которого требуется код, который извлекает данные в этой таблице по столбцу, чтобы они могли отображаться отдельно.

Как бы я это сделал?

+1

так что вы поворачиваете данные из строк в столбцы, и теперь вы хотите, что раньше было в строке, но возвращались в виде столбца? Почему именно вы поворачиваете данные вместо того, чтобы просто возвращать строку из исходных данных? – Tanner

+0

Мне нужно, чтобы мои данные отображались в столбцах, таким образом, перенос из по-разному в столбцы. Поворот данных дает мне необходимый формат. – Pastafarian

+0

... Я думаю, что вы серьезно недопонимаете концепцию столбцов SQL, а не отображаете столбцы. – anaximander

ответ

0

Это терминологическое перекрытие.

  • В SQL «строка» означает (примерно) единый объект, а «столбец» означает свойство для объектов.
  • В пользовательском интерфейсе «строка» означает данные, расположенные горизонтально, а «столбец» означает данные, расположенные вертикально.

Ваше требование состоит в том, чтобы вы отображали свои объекты по вертикали. Итак, извлеките свои объекты (SQL rows), а затем добавьте код в свое приложение, чтобы отобразить эти данные в UI столбцах. Несчастливо и, возможно, сбивает с толку, что условия здесь одинаковы, но помните, что структура вашей базы данных (и выбор терминологии) совершенно не имеет отношения к вашему макету пользовательского интерфейса.

Что касается кода вашего приложения, необходимого для отображения данных ... ну, вы даже не сказали нам, на каком языке он находится, поэтому я не могу с этим поделать.

+0

Как я уже говорил в оригинальной публикации, я полностью понимаю тот факт, что в SQL «строка» представляет собой единый объект, а не столбец. У меня нет недоразумений. Я знаю, что внешний интерфейс приложения (который не подпадает под мой контроль) непосредственно отображает сетку, поскольку она закодирована в SQL. Этот «макет», как вы его называете, не может быть изменен пользовательским интерфейсом. – Pastafarian

+0

Справа. Вы никогда этого не указали. Вы сказали, что ваше приложение требует, чтобы вещи отображались * в столбцах; это звучало так, будто вы пытались написать код дисплея. Теперь ... Я не совсем уверен, что вы ищете здесь. Если у вас есть программа, которая отображает столбцы, то вы закончите, потому что этот запрос выводит ваши данные в столбцы уже. Какой результат дает ваше приложение, когда будет представлен запрос в вашем вопросе? – anaximander

+0

Также я знаю, что это может вам не помочь, но если у вас есть программа, предназначенная для ввода данных из SQL, которая настроена для обработки * столбцов * как объектов, а не строк, то я подозреваю, что либо она очень плохо разработана, либо вы «использовать его для чего-то, для чего он не предназначен. – anaximander

Смежные вопросы