0

我正在尝试查看两个表 TableA 和 TableB 打印出任何显示超过 1 个计数的 TableA.ID。表 A 如下所示:

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。我的问题是有另一种方法可以做到这一点,或者我如何才能访问 TableA.Code 的 Message MoreThanOne。

谢谢您的帮助!

4

4 回答 4

4

此查询将为您提供表 B 中重复的所有 AID 的代码:

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

您可能还希望将WHERE存储过程中的条件添加到内部选择中。

于 2012-08-03T18:23:23.730 回答
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
于 2012-08-03T18:25:30.787 回答
0

您可以非常简单地做到这一点,无需加入:

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

这只是按 AID 聚合 tableB,返回具有多个记录的值。如果您还想要代码,则只需要加入 TableA。

于 2012-08-03T18:33:27.277 回答
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
于 2012-08-03T18:37:04.200 回答