大家好我想在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上尝试完全相同的代码时,它一直说FROM
子句有错误。
我想知道这是否因为访问语法与SQL服务器的语法有所不同?如果有人能告诉我如何运行此代码,我将非常感激。
答案 0 :(得分:3)
只需使用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
。
答案 1 :(得分:0)
请记住,如果您真的从实际数据库中读取数据,则可以使用pass-thru而不是特定于Access的查询来使用所有特定于RDMBS的功能(在本例中为MS SQL Server)。你唯一丢失的是设计师工具。我所说的是您可以将查询按字面粘贴到Access中,并像使用任何其他Access查询一样使用它。
如果该表已经在Access中(与链接数据源脱离)或者没有通过pass-thru支持,则可能会有效。它非常强大,但是如果你用一个名为ID的字段创建一个表(在这个例子中称之为#34;序列"):
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中的等价物。