3

これが可能かどうかはわかりませんが、データベースの設計が不十分で、より良い方法で実行できたのでしょうか?

とにかく、私は次のような 2 つのテーブルを持つデータベースを持っています " 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 - - - - - - - - - - - - - - - - - - - - - - -

別のフォーラムで見つけた連結関数とクエリを少し試してみましたが、やりたいことには適していませんでした

どんな助けでも、正しい方向に私を向けることさえも素晴らしいでしょう!

4

2 に答える 2

1

これを実現するには、いくつかのクロス集計クエリを使用する必要があります。

最初に、次のクエリを使用して "Assessment Data" テーブルを並べ替え、結果を "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];

次に、この一時テーブルを 2 つのサブクエリで使用できます。1 つは体重値を取得するため、もう 1 つは高さを取得するためです。

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];

次に、これら 2 つのサブクエリを結合して、必要なクエリを取得できます。

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;
于 2013-06-15T07:30:25.170 に答える
0

これを試して:

select * from general_data 
INNER JOIN assessment_data ON general_data.id = assessment.id
于 2012-12-14T01:26:43.510 に答える