【问题标题】:MS Access - How do I display two fields from separate records on the same line based on their ID and Date?MS Access - 如何根据 ID 和日期在同一行显示来自不同记录的两个字段?
【发布时间】:2015-05-16 02:43:40
【问题描述】:

我不知道这是否可能,或者我的数据库设计不佳,我本可以做得更好?

不管怎样,我有两个表的数据库,分别是“General Data”和“Assessment Data”——它们的设置是为了让患者可以在“常规数据”中输入一些基本细节,然后每次他们进行评估时,他们都会将与该评估相关的数据输入到“评估数据”表中

抱歉,格式不正确!没有足够的声望点来上传图片:(

一般数据

**ID --     Age (Years) --  Gender --   Town    ------ Referral Source --   Referral Doctor's Name**

1----   12----------------  Male--------    Batlow----- GP Referral----------   Smith

2----   13----------------  Male    --------Coolamon-   GP Referral ---------Bobby

评估数据

**ID -- Date of Assessment -----    Height (cm) ----- Weight (kg)**

1----   6/12/2012--------------------   100-------------------- 80

1----   13/12/2012------------------    100-------------------- 85

2----   25/12/2012  ------------------200--------------------   90

2----   28/12/2012------------------    200 ------------------- 90

我想做的是创建一个查询,该查询将创建如下内容

查询?

**ID - - Height 1 - - Weight 1 - - Height 2 -- Weight 2 - - Height 3 - - Weight 3 etc...**

1 - - 100  - - - - - - - 80 - - - - - - - 100 - - - - - 85 - - - - - -  - - - - - - - - - - - - - - - - - 

2 - - 200 - - - - - - - 90 - - - - - - - 200 - - - -  - 90 - - - - - - - - - - - - - - - - - - - - - - -

我在另一个论坛上发现了一个连接函数和查询,但它不适合我想做的事情

任何帮助甚至为我指明正确的方向都会很棒!

【问题讨论】:

  • 我想知道为什么要在结果表中显示重复的身高值(身高 1,身高 2),因为一个人的身高可能不会改变。
  • @chuff ID 1 是 12 岁的男性。身高会随着他的成长而改变。然后几十年后,他的身高可能会降低。您不能合理地假设高度的静态值。
  • @chuff 是的,身高可能会随着时间的推移而改变......假设我只需要体重,你能帮忙吗??

标签: ms-access concatenation rows


【解决方案1】:

您需要使用几个交叉表查询来实现这一点。

首先,您需要使用以下查询对“评估数据”表进行排序,并将结果放入名为“Temp_AssessmentData”的临时表中。

    SELECT AssData.Id, AssData.[Date of Assessment], 
        (SELECT Count(*) 
             FROM [Assessment Data] 
             WHERE [Date of Assessment] < [AssData].[Date of Assessment] 
                 AND Id = [AssData].Id
        )+1 AS Sequence 
    INTO Temp_AssessmentData FROM [Assessment Data] AS AssData GROUP BY AssData.Id,
       AssData.[Date of Assessment];

然后你可以在两个子查询中使用这个临时表,一个获取体重值,另一个获取身高。

qAssessmentData_Weight

 TRANSFORM First([Assessment Data].[Weight (cm)]) AS [FirstOfWeight (cm)]
   SELECT Temp.Id
   FROM [Assessment Data] 
       INNER JOIN Temp_AssessmentData AS Temp ON (
          [Assessment Data].[Date of Assessment] = Temp.[Date of Assessment]) 
          AND ([Assessment Data].Id = Temp.Id)
   GROUP BY Temp.Id
   PIVOT "Weight " & [Sequence];

qAssessmentData_Height

 TRANSFORM First([Assessment Data].[Height (kg)]) AS [FirstOfHeight (kg)]
   SELECT Temp.Id
   FROM [Assessment Data] 
       INNER JOIN Temp_AssessmentData AS Temp ON (
          [Assessment Data].[Date of Assessment] = Temp.[Date of Assessment]) 
          AND ([Assessment Data].Id = Temp.Id)
   GROUP BY Temp.Id
   PIVOT "Height" & [Sequence];

然后您可以将这两个子查询连接在一起以获得所需的查询

SELECT Sub_Height.Id, Sub_Weight.[Weight 1], Sub_Height.[Height 1], 
    Sub_Weight.[Weight 2], Sub_Height.[Height 2]
FROM qAssessmentData_Height AS Sub_Height, qAssessmentData_Weight AS Sub_Weight;

【讨论】:

    【解决方案2】:

    试试这个:

    select * from general_data 
    INNER JOIN assessment_data ON general_data.id = assessment.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 2013-11-30
      相关资源
      最近更新 更多