accesssql中的Unpivot
大家好,我正在尝试在MS Access上使用SQL中的unpivot,我在网上发现了以下代码:accesssql中的Unpivot,sql,ms-access,unpivot,Sql,Ms Access,Unpivot,大家好,我正在尝试在MS Access上使用SQL中的unpivot,我在网上发现了以下代码: SELECT CustomerID, Phone FROM ( SELECT CustomerID, Phone1, Phone2, Phone3 FROM dbo.CustomerPhones ) AS cp UNPIVOT ( Phone FOR Phones IN (Phone1, Phone2, Phone3) ) AS up; 从本网页: 然而,当我在Access上尝试完
SELECT CustomerID, Phone
FROM
(
SELECT CustomerID, Phone1, Phone2, Phone3
FROM dbo.CustomerPhones
) AS cp
UNPIVOT
(
Phone FOR Phones IN (Phone1, Phone2, Phone3)
) AS up;
从本网页:
然而,当我在Access上尝试完全相同的代码时,它总是说FROM
子句有错误
我想知道这是否是因为access的语法与SQL server中的不同?如果有人能告诉我如何运行此代码,我将不胜感激。只需使用
union all
:
SELECT CustomerID, Phone1 as Phone
FROM dbo.CustomerPhones
UNION ALL
SELECT CustomerID, Phone2 as Phone
FROM dbo.CustomerPhones
UNION ALL
SELECT CustomerID, Phone3 as Phone
FROM dbo.CustomerPhones;
如果您希望产生删除重复项的开销,那么请使用
UNION
请记住,如果您确实从实际数据库中读取数据,则可以通过使用传递而不是特定于访问的查询来使用所有特定于RDMBS的功能(在本例中为MS SQL Server)。你唯一失去的就是设计器工具。我想说的是,您可以按原样将查询粘贴到Access中,并像其他Access查询一样使用它
如果该表已经处于访问状态(与链接的数据源分离)或不支持通过传递,则这可能会起作用。这是一个非常暴力的行为,但是如果您创建一个表(在本例中称之为“序列”),其中包含一个名为ID的字段:
ID
1
2
3
然后,您可以对电话表执行交叉(笛卡尔)连接:
select
p.[CustomerId],
s.[ID],
switch (
s.[ID] = 1, p.[Phone1],
s.[ID] = 2, p.[Phone2],
s.[ID] = 3, p.[Phone3]
) as Phone
from
[CustomerPhones] as p,
[Sequence] as s
序列表可能有另一种解决方法。。。Postgresql有一个名为generate_series的函数,非常完美,但我不知道Access中的等效函数。Access没有内置的
UNPIVOT
功能,q.v。如果您包含示例数据,可能会有人给您提供解决方法。@onedaywhen。问题中的unpivot
将返回重复项。