Как отобразить вертикальные данные горизонтально через sql

#sql #sql-server #sql-server-2005 #tsql #sql-server-2008

#sql #sql-сервер #sql-server-2005 #tsql #sql-server-2008

Вопрос:

в моей таблице есть два столбца columnname и data

я выдаю простой sql like 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 мне нужно выдать………. пожалуйста, помогите.

Комментарии:

1. Где вы выполняете select инструкцию? SQL Server Management Studio?

Ответ №1:

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

Ответ №2:

 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. Впервые я услышал о Pivot — спасибо. Доступно ли это в чем-либо другом, кроме MQ SQLServer 2005? Мой google-fu терпит неудачу

2. Если вы говорите о 2008, то да

3. Извините, я знаю только MS Sql server. 🙂

4. @Wudang — Это также поддерживается Oracle

5. почему здесь используется функция Max ().

Ответ №3:

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

 SELECT * FROM tbl
PIVOT (
    MAX(data) 
    FOR colname in ([JID],[WID],[AccountReference],[OEReference],[InvoiceNumber])
) pv
  

Ответ №4:

Вы можете найти это в моем блоге:http://sql-tricks.blogspot.com/2011/04/sql-server-rows-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
       ) ;