0

TableAとTableBの2つのテーブルを調べて、1つ以上のカウントを示すTableA.IDを出力しようとしています。TableAは次のようになります。

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

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 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 に答える
0

結合なしで、これを非常に簡単に行うことができます。

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

これは単純に tableB を AID で集計し、複数のレコードを含む値を返します。コードも必要な場合にのみ、TableA に参加する必要があります。

于 2012-08-03T18:33:27.277 に答える