我在将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 contactrecord.wellknownname
;
编辑:回应一些评论
联系人表格有三个字段
contactid | detailid | value |
1 1 Scott
contactrecord有类似
的内容detailid | wellknownname
1 | FirstName
2 | Address1
3 | foobar
contractrecord是dyanamic,因为用户可以随时创建一个要添加到联系人的字段
访问查询退出
contactid | FirstName | Address1 | foobar
1 | Scott | null | null
这是wellknownname上的数据透视表。这里的关键是列数是动态的,因为用户可以随时为联系人创建另一个字段。完全是数据透视表的新手,我想知道如何在sql server中重新创建这个访问查询。
至于转换...这是一个内置的访问功能。有关它的更多信息here。 First()将在该匹配行上获取第一个结果。
我希望这有助于并感谢所有帮助。
答案 0 :(得分:2)
我快速搜索动态数据透视表,提出this article。
在页面上的最后一个查询中重命名后,我想出了这个:
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);
尽管它很丑陋,但却能胜任