我目前有一段代码可以动态地插入行数据。代码如下所示:
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
现在,我的应用程序要求我分别显示此表中的每个列,即此表的每个列而不是行都需要从此表中导出并传输,可能进入一个临时表,从中可以很容易地显示。
我很清楚关系数据库是以这样的方式设计的,以便将行而不是列视为单独的实体。但是,我受到我正在使用的应用程序的限制,这需要代码以列方式提取此表中的数据,以便它们可以单独显示。
我将如何做到这一点?
答案 0 :(得分:0)
这是术语重叠。
您的要求是您应该垂直显示您的实体。因此,检索您的实体(SQL 行),然后在您的应用程序中添加代码,以在UI 列中显示此数据。这里的术语相同是不幸的,也许令人困惑,但请记住,您的数据库结构(以及术语的选择)与您的UI布局完全无关。
至于您的应用程序中需要显示数据的代码......好吧,您甚至没有告诉我们它是什么语言,所以我无法帮助那里。