Tsql 将Access Pivot表转换为SQL Server
将MS Access数据透视表转换为SQL Server时遇到问题。希望有人能帮上忙Tsql 将Access Pivot表转换为SQL Server,tsql,ms-access,Tsql,Ms Access,将MS Access数据透视表转换为SQL Server时遇到问题。希望有人能帮上忙 TRANSFORM First(contacts.value) AS FirstOfvalue SELECT contacts.contactid FROM contacts RIGHT JOIN contactrecord ON contacts.[detailid] = contactrecord.[detailid] GROUP BY contacts.contactid PIVOT contactrec
TRANSFORM First(contacts.value) AS FirstOfvalue
SELECT contacts.contactid
FROM contacts RIGHT JOIN contactrecord ON contacts.[detailid] = contactrecord.[detailid]
GROUP BY contacts.contactid
PIVOT contactrecord.wellknownname
;
编辑:回复一些评论
联系人表有三个字段
contactid | detailid | value |
1 1 Scott
contactrecord有点像
detailid | wellknownname
1 | FirstName
2 | Address1
3 | foobar
contractrecord是动态的,用户可以随时创建要添加到联系人的字段
访问查询退出
contactid | FirstName | Address1 | foobar
1 | Scott | null | null
这是众所周知的名字的支点。这里的关键是列的数量是动态的,因为用户可以随时为联系人创建另一个字段。由于不熟悉透视表,我想知道如何在sql server中重新创建此访问查询
至于转换。。。这是一个内置的访问功能。有关它的更多信息。First()将只获取匹配行上的第一个结果
我希望这有帮助,并感谢所有的帮助 我快速搜索动态数据透视表时会发现 在他在页面上的最后一个查询中对事物进行重命名后,我得出以下结论:
DECLARE @PivotColumnHeaders VARCHAR(max);
SELECT @PivotColumnHeaders = COALESCE(@PivotColumnHeaders + ',['+ CAST(wellknownname as varchar) + ']','['+ CAST(wellknownname as varchar) + ']')
FROM contactrecord;
DECLARE @PivotTableSQL NVARCHAR(max);
SET @PivotTableSQL = N'
SELECT *
FROM (
SELECT
c.contactid,
cr.wellknownname,
c.value
FROM contacts c
RIGHT JOIN contactrecord cr
on c.detailid = cr.detailid
) as pivotData
pivot(
min(value)
for wellknownname in (' + @PivotColumnHeaders +')
) as pivotTable
'
;
execute(@PivotTableSQL);
尽管它很难看,但它可以完成这项工作如果您将转换替换为某个标准命令,它将更容易提供帮助。如果我们看到您的数据和您的预期output@t-clausen.dk:根据我在这里学到的,似乎
TRANSFORM
是用于数据透视的标准命令(在MS Access中),删除它,或者用相应的T-SQL构造替换它,就是这个问题。但是我同意你的观点,这些例子会非常有帮助。@Scott:不是所有人,可能也不是很多人,都对MS Access和T-SQL非常了解,能够帮助你@t-clausen.dk是正确的:发布示例数据和输出将真正帮助我们这些对t-SQL非常熟悉的人提出一个好的解决方案。@t-clausen.dk我不担心从SQL方面进行排序。所有内容都被推到一些.NET代码中。然而,下一个挑战是如何看待这一点。