0

私は活動の単一の表を持っています。いくつかは「評価」(50のtype_id)といくつかの「カウンセリング」(9のtype_id)というラベルが付けられており、活動の日付があります。これらの日付を比較して、評価後にカウンセリングを待つ時間を見つける必要があります. テーブルには多くの人の行が含まれており、それが「id」の主キーです。私の問題は、日付を比較できるように、同じ人の評価の詳細とカウンセリングの詳細の両方を含む結果行を作成する方法です。テーブルをそれ自体に結合しようとしましたが、ネストされたサブクエリを試しましたが、理解できません。私はAccess 2010を使用しています。私の愚かさを許してください、しかし、これはテーブルをそれ自体に結合する例です。

表は次のようになります。

ID    TYPE_ID   ACTIVITY_DATE_TIME
----------------------------------
1        9      20130411  
1     v 50 v    20130511  
2        9      20130511  
3        9      20130511 

上記の最後の 2 行には評価しか含まれていないため、それらを無視して、評価とカウンセリングの両方の「type-id」がある状況に取り組みます。

SELECT
  civicrm_activity.id, civicrm_activity.type_id,
  civicrm_activity.activity_date_time,
  civicrm_activity_1.type_id,
  civicrm_activity_1.activity_date_time
FROM
  civicrm_activity INNER JOIN civicrm_activity AS civicrm_activity_1
  ON civicrm_activity.id = civicrm_activity_1.id
WHERE
  civicrm_activity.type_id=9
  AND civicrm_activity_1.type_id=50;

これが実際にSQLで行うことができないのかどうか、私は実際に疑問に思っていますか? 私はそれが可能であることを望みますか?お待ちいただいてありがとうございます!

4

2 に答える 2

0

9 と 50 の両方の TYPE_ID エントリがある ID 番号のみを取得したいように思えます。

SELECT DISTINCT id FROM civicrm_activity WHERE type_id = '9' AND id IN (SELECT id FROM civicrm_activity WHERE type_id = '50');

これにより、type_id 9 と 50 の両方のエントリを持つ ID のリストが表示されます。そのリストを使用して、詳細を取得できます。

type_id 9 の時間にこの SQL を使用します

SELECT activity_date_time FROM civicrm_activity WHERE id = 'id_from_last_sql' AND type_id = '9'

type_id 50 の時はこの SQL を使う

SELECT activity_date_time FROM civicrm_activity WHERE id = 'id_from_last_sql' AND type_id = '50'
于 2013-05-12T08:54:36.253 に答える
0

あなたのクエリも私には問題ないようです。1 つの問題は、テーブルの別名を 1 つしか使用しないことです。わかりませんが、おそらくAccessはテーブル名を「特別に」扱い、実質的にWHERE句が

WHERE
    civicrm_activity.type_id=9
AND civicrm_activity.type_id=50;

それは確かにゼロ行が返されたことを説明します!

これを修正するには、テーブルごとにエイリアスを使用します。短いものをお勧めしますが、

SELECT  A.id, A.type_id, A.activity_date_time,
              B.type_id, B.activity_date_time
FROM  civicrm_activity as A 
JOIN  civicrm_activity as B
ON    A.id = B.id
WHERE A.type_id=9
AND   B.type_id=50;
于 2013-05-13T05:25:02.840 に答える