如何通过sql水平显示垂直数据

时间:2011-06-08 11:36:15

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我的表有两列列名和数据

我发出一个像select * from mytable这样的简单sql,然后数据显示为

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

但我希望以不同的方式显示数据,如

JID     WID    AccountReference   OEReference     InvoiceNumber
41185   0      LH169              Ari002          0

如果我需要以极大的方式显示数据,那么我需要发出什么样的SQL ..........请帮忙。

4 个答案:

答案 0 :(得分:4)

SQL并不是关于显示的。您遇到的问题是您确实需要2个查询(1个用于colname,1个用于数据),但不保证每个查询都会以相同的顺序返回数据。你真的需要围绕这个包装一些外部代码 - 将查询结果保存在二维数组的字符串(或集合等)中然后遍历每个

答案 1 :(得分:3)

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

答案 2 :(得分:1)

如果事先知道colname的值&唯一的;

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

答案 3 :(得分:1)

您可以在我的博客中找到: 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
       ) ;