Microsoft Jet数据库引擎中的数据转换

时间:2017-10-11 22:07:01

标签: ms-access

应该使用什么查询,如果我有一个我想要转换的数据集

From | To | Val1 | Val2 | Val3
123 130 AB  DE  EF
131 140 WS  ED  RF
141 145 GT  HY  JU

我想在Microsoft Jet数据库引擎或MS Access中打印以下数据集。

ID | Val1 | Val2 | Val3
123 AB  DE  EF
124 AB  DE  EF
125 AB  DE  EF
126 AB  DE  EF
127 AB  DE  EF
128 AB  DE  EF
129 AB  DE  EF
130 AB  DE  EF
131 WS  ED  RF
132 WS  ED  RF
133 WS  ED  RF
134 WS  ED  RF
135 WS  ED  RF
136 WS  ED  RF
137 WS  ED  RF
138 WS  ED  RF
139 WS  ED  RF
140 WS  ED  RF
141 GT  HY  JU
142 GT  HY  JU
143 GT  HY  JU
144 GT  HY  JU
145 GT  HY  JU

3 个答案:

答案 0 :(得分:1)

这适用于SQL Server,但不确定在使用访问时如何使用此技术。

create table #t (F_Val int, 
    To_Val int, 
    Val1 varchar(5), 
    Val2 varchar(5), 
    Val3 varchar(5)
)

insert into #t values
(123, 130, 'AB', 'DE', 'EF'),
(131, 140, 'WS', 'ED', 'RF'),
(141, 145, 'GT', 'HY', 'JU')

;with ct as (
    select ROW_NUMBER() over (ORDER BY object_id) as RN
    from sys.objects
)
select RN, #t.Val1, #t.Val2, #t.Val3
from ct
    inner join #t on ct.RN between #t.F_Val and #t.To_Val

juts注意到sys.objects的数量在数据库中是有限的,所以这不适用于更大的范围但是这个想法是这样的。

答案 1 :(得分:0)

使用此SQL创建并保存查询qdxFactor:

SELECT DISTINCT 
    [Tens]+[Ones] AS Factor, 
    10*Abs([Deca].[id] Mod 10) AS Tens, 
    Abs([Uno].[id] Mod 10) AS Ones
FROM 
    MSysObjects AS Uno, 
    MSysObjects AS Deca;

然后创建一个笛卡尔查询:

Select
    [From] + Factor As ID,
    Val1,
    Val2,
    Val3
From
    YourTable,
    qdxFactor
Where
    [From] + Factor <= [To]

答案 2 :(得分:0)

据我了解你的帖子 - 你的数据集有两个日期范围的日期;从和到。您试图为日期范围内的所有日期创建记录。

表连接方法最简单 - 但必须有一个新表,其中包含ID字段的所有可能值。因此,在您发布的示例中,您需要一个包含单个列ID的表,其中包含从123到145的22条记录。但我认为在现实生活中,您的数据集可能要大得多 - 有时候创建更难。我们称之为ID表。

在select查询中,使用join子句的SQL语法将ID Table连接到表1: [表1]。[From]&gt; = [ID表]。[ID]和[表1]。[To]&lt; = [ID表]。[ID]。

如果你的ID范围非常大到基本上无限 - 那么人们需要一种不同的方法来动态增加ID值。这可能很慢。更有效的变化可能是在运行时创建所需的ID表,仅用于查询时所需的范围集。