Как показать вертикальные данные по горизонтали через sql - PullRequest
2 голосов
/ 08 июня 2011

моя таблица имеет два столбца имя столбца и данные

я выдаю простой SQL как select * from mytable, тогда данные отображаются как

colname               data
-------------------   -----------
JID                   41185
WID                   0
AccountReference      LH169
OEReference           Ari002
InvoiceNumber         0

но я хочу отображать данные по-другому, как

JID     WID    AccountReference   OEReference     InvoiceNumber
41185   0      LH169              Ari002          0

если мне нужно показывать данные по горизонтали, тогда какой sql мне нужно выдать .......... пожалуйста, помогите.

Ответы [ 4 ]

4 голосов
/ 08 июня 2011

SQL на самом деле не для отображения.Проблема, с которой вы столкнулись, состоит в том, что вам действительно понадобится 2 запроса (1 для имени столбца и 1 для данных) без гарантии, что данные будут возвращены в том же порядке для каждого запроса.Вам действительно нужно обернуть вокруг него некоторый внешний код - сохраните результаты запроса во 2-м массиве строк (или в коллекции и т. Д.), А затем переберите каждый

3 голосов
/ 08 июня 2011
SELECT  JID,WID,AccountReference,OEReference,InvoiceNumber
FROM    
( 
    SELECT colname, data FROM YourTableName
) 
p 
PIVOT 
( 
    Max(data) FOR colname 
    IN ([JID],[WID],[AccountReference],[OEReference],[InvoiceNumber])
) AS pvt

Вы можете попробовать по ссылкам ниже. содержит учебные пособия по использованию Pivot.

Link1

Link2

1 голос
/ 08 июня 2011

Вы можете найти это в моем блоге: http://sql -tricks.blogspot.com / 2011/04 / sql-server-row-transpose.html

Вы должны изменить @переменная xml вот так:

SET @xml = ( SELECT colname,data,
                Row_Number() OVER ( ORDER BY ( SELECT   1
                                             ) ) Rn
         FROM   mytable
       FOR
         XML PATH('Row') ,
             ROOT('Root') ,
             ELEMENTS XSINIL
       ) ;
1 голос
/ 08 июня 2011

Если значения colname известны заранее и уникальны;

SELECT * FROM tbl
PIVOT (
    MAX(data) 
    FOR colname in ([JID],[WID],[AccountReference],[OEReference],[InvoiceNumber])
) pv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...