我的表有两列列名和数据
我发出一个像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 ..........请帮忙。
答案 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的教程。
答案 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
) ;