尝试使用C#/ MVC4中的LINQ或LAMBDA来转移动态数据,并且几乎得出结论,它很难做到。
这基本上就是我想做的事情:
我已经能够使用此示例使用已知列名称来使用它:http://geekswithblogs.net/malisancube/archive/2009/04/21/using-lambda-or-linq-for-pivot-tables.aspx
但我找不到使用动态列做这个的任何示例。
通过动态列我的意思是可能有一个新的行,其中有一个不同的Name和FieldType,在任何时候都没有在表中,也需要变成一个列..任何指针?。
答案 0 :(得分:2)
我不知道LINQ
所以我会给你一个可以在SQL Server存储过程中使用的版本。这种类型的数据转换称为PIVOT
。由于您使用的是SQL Server 2008+,因此可以使用该功能。
如果您知道要转换的值,则可以对值进行硬编码:
SELECT nodeid, rowid,[FirstName], [LastName], [Title]
FROM
(
SELECT nodeid, rowid, name, value
FROM yourTable
) x
PIVOT
(
max(value)
for name in ([FirstName], [LastName], [Title])
)p
然后,如果您有未知数量的值,则可以实现动态SQL:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(name)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT nodeid, rowid,' + @cols + ' from
(
SELECT nodeid, rowid, name, value
FROM yourTable
) x
pivot
(
max(value)
for name in (' + @cols + ')
) p '
execute(@query)
两者都返回结果:
| NODEID | ROWID | FIRSTNAME | LASTNAME | TITLE |
--------------------------------------------------
| 1 | 1 | Alfred | Beagle | (null) |
| 1 | 2 | Freddy | (null) | (null) |
| 1 | 3 | (null) | Grey | Sir. |