1

为了回答我的问题,我将简化我的数据结构。我有三个表,样本、分析、值。Sample 有一个 Pk 自动编号字段、SampleID 和一个 DateCreated 字段。Analysis 有一个 PK 自动编号字段 AnalysisID 和一个 AnalysisName 字段。Values 有三个字段,SampleID、AnalysisID、Value。数据的通用布局如下。

样本

 SampleID     DateCreated
 1            6/1/2013
 2            6/2/2013
 3            6/3/2013
 4            6/3/2013

分析

AnalysisID    AnalysisName
1             Temp
2             Density
3             Mass

价值观

SampleID    AnalysisID    Value
1           1             65
1           2             1.1
2           1             68
2           2             1.0
2           3             57
3           2             1.2
4           2             0.9
4           3             54

现在,我希望有人能够即时设计查询......我想我可以弄清楚,如果我能弄清楚如何将这些数据转换为以下格式。例如,如果用户想要所有样本和分析,则查询需要生成这样的表......

SampleID  DateCreated  Temp  Denisty  Mass
1         6/1/2013     65    1.1 
2         6/2/2013     68    1.0      57
3         6/3/2013           1.2
4         6/3/2013           0.9      54

得到这个结果的查询会是什么样子?我可以弄清楚如何使用 VBA 动态创建它,只要我能理解最终的 SQL 结果需要是什么样子。谢谢!

4

2 回答 2

3

这是一个 PIVOT 表查询,它将为您完成。
表 1-3 按照您列出的顺序排列。我还将 Value 重命名为 Value1,因为它是保留字。

TRANSFORM First(Table3.Value1) AS FirstOfValue1
SELECT Table1.SampleID, Table1.DateCreated
FROM Table2 INNER JOIN (Table1 INNER JOIN Table3 ON Table1.SampleID = Table3.SampleID) ON Table2.AnalysisID = Table3.AnalysisID
GROUP BY Table1.SampleID, Table1.DateCreated
PIVOT Table2.AnalysisName;

将其粘贴到查询构建器的 SQL 部分,然后单击设计按钮以查看它是如何完成的。

于 2013-06-07T05:04:21.977 回答
2

不确定访问特定的答案,但您可能可以使用 CASE 语句,无需所有连接即可简化,例如:

SELECT SampleID, DateCreated
       ,MAX(CASE WHEN AnalysisID = 1 THEN Value ELSE '' END) as Temp
       ,MAX(CASE WHEN AnalysisID = 2 THEN Value ELSE '' END) as Density
       ,MAX(CASE WHEN AnalysisID = 3 THEN Value ELSE '' END) as Mass
FROM Tables/Joins, Etc.
GROUP BY SampleID, DateCreated

您也可以查看 PIVOT 函数,但如果您只有少数分析类型,那么这是一种简单的方法。

于 2013-06-07T01:20:24.920 回答