2012-08-03 59 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 
相关问题