簡體   English   中英

在SQL中如何從同一表中的多個行返回單行數據

[英]in sql how to return single row of data from more than one row in the same table

我有一個活動表,其中一些標記為“評估”(type_id為50),而某些標記為“咨詢”(type_id為9),並帶有活動日期。 我需要比較這些日期,以找到人們經過評估后等待咨詢的時間。 該表包含許多人的行,這是“ id”的主鍵。 我的問題是如何在同一人的評估結果和咨詢詳細信息中生成結果行,以便我可以比較日期。 我嘗試將表自身連接起來,並嘗試嵌套的子查詢,但我無法理解。 我正在使用Access 2010 btw。 請原諒我的愚蠢,但這是一個將表連接到自身不起作用,不產生任何結果的示例(不足為奇):

表看起來像:

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

在上面的最后兩行中,僅進行了評估,因此我想忽略它們,而只是在存在評估和咨詢'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? 我希望有可能嗎? 感謝您的耐心等待!

在我看來,您只想獲得ID編號(如果您輸入的TYPE_ID均為9和50)。

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

這將為您提供ID列表,其中包含具有type_id 9和50的條目。有了該列表,您現在就可以獲取詳細信息。

在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'

您的查詢對我來說也可以。 一個問題可能是您僅使用一個表別名。 我不知道,但是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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM