2012-08-03 91 views
0

我試圖通過兩個表來查看TableA和TableB打印出任何顯示多於1個計數的TableA.ID。表A看起來是這樣的:IF(Count(*)> 1)

ID | Code 
------------ 
1 | A 
2 | B 
3 | C 

表B貌似

ID | AID | EffectiveDate | ExpirationDate 
------------------------------------------------ 
1 | 1 | 2012-01-01  | 2012-12-31 
2 | 1 | 2012-01-01  | 2012-12-31 
3 | 2 | 2012-01-01  | 2012-12-31 
4 | 3 | 2012-01-01  | 2012-12-31 

查詢我使用看起來像這樣:

DECLARE @MoreThanOne varchar(250) 
SET @MoreThanOne = '' 
IF((SELECT COUNT(*) FROM TableA 
WHERE EXISTS(
SELECT TableB.ID 
     ,TableB.EffectiveDate 
     ,TableB.ExpirationDate 
    FROM TableB 
    WHERE TableB.AID = TableA.ID 
     and GETDATE() Between TableB.EffectiveDate and TableB.ExpirationDate 
) 
GROUP BY TableA.Code) > 1) 
BEGIN 
--SET @MoreThanOne = @MoreThanOne + TableA.Code + CHAR(10) 

END 


PRINT @MoreThanOne 

我知道,當返工它將我的嵌套查詢工作在TableA中的唯一代碼中打印全部計數。 我知道我無法使用我註釋掉的內容,因爲我無法訪問TableA.Code。 我的問題是有另一種方法來做到這一點,或如何獲得消息MoreThanOne的TableA.Code。

感謝您的幫助!

回答

4

此查詢將讓你的代碼爲表B複製所有艾滋病:

SELECT Code 
FROM TableA 
WHERE AID IN 
(
    SELECT AID 
    FROM TableB 
    GROUP BY AID 
    HAVING COUNT(*) > 1 
) 

您也不妨在你的存儲過程中添加WHERE條件有內部的選擇。

+0

感謝就像一個魅力! – 2012-08-03 18:39:13

1

試試這個

SELECT TableA.ID, TableA.Code, Count(*) As Cnt 

     FROM TableB, TableA 
     WHERE TableB.AID = TableA.ID 
      and GETDATE() Between TableB.EffectiveDate and TableB.ExpirationDate 
     GROUP BY TableA.ID, TableA.Code 
     HAVING COUNT(*) > 1 
+0

它正在進行內部連接。 – 2012-08-03 18:34:44

+0

是的我編輯很久之前你提到它:) – 2012-08-03 18:37:12

0

你可以做到這一點很簡單,沒有加入:

SELECT tableb.AID 
FROM TableB 
WHERE GETDATE() Between TableB.EffectiveDate and TableB.ExpirationDate 
group by tableb.AID 
having count(*) > 1 

這只是彙總tableB的由AID,與一個以上的記錄返回值。如果你想要代碼,你只需要加入TableA。

0

這應該做你:

select Code  = a.Code , 
     Frequency = count(*) 
from table_a a 
join table_b b on b.aid = a.id 
       and current_timestamp between b.EffectiveDate and b.ExpirationDate 
group by a.Code 
having count(*) > 1 
order by 2 desc -- order in descending sequence by frequency 
     1  -- then ascending sequence by code