私はどのように質問を記述するか分からないが、私は関税に属性を付けるコードを提案しようとしている。私はOracleでこれをやっています。
私のデータベース構造は次のとおりです。
CODE (
CODEID *PK NCHAR(10)
)
CODETARIFF (
TARIFFNO NCHAR(15) *PK *FK
CODEID NCHAR(10) *PK *FK
)
TARIFF (
TARIFFNO NCHAR(15) *PK
)
だから私は論理的にどのコードを関税に割り当てるべきかのためのテンプレートを作ろうとしている。私は、「6つの関税もまた、これらの2つのコードが関連付けられている」という行に沿って何かを示すことを想像しています。
私はこれを試しましたが、それぞれのコードに対して返されるカウントは実際にテンプレートを表示していません。私が指定した2つのコードが表示されたときの発生率しか表示されません。
SELECT COUNT(*), CodeID
FROM CodeTariff
INNER JOIN (
SELECT TariffNo, COUNT(*)
FROM CodeTariff
WHERE CodeID IN ('ABC', 'DEF')
GROUP BY TariffNo
HAVING COUNT(*) > 1) SQ
ON CodeTariff.TariffNo = SQ.TariffNo
WHERE CodeID NOT IN ('ABC', 'DEF')
GROUP BY CodeTariff.CodeID
ORDER BY COUNT(*) DESC;
これは混乱している場合はごめんなさい。
私もこれが可能かどうかはわかりませんが、私はこのような出力を探しています:
データ: 関税コード
TariffNo CodeID
1111 ABC
1111 DEF
2222 ABC
2222 DEF
2222 GHI
2222 JKL
3333 ABC
3333 DEF
3333 GHI
3333 JKL
アウトプット:(関税1111が与えられたとき)
CodesToAdd Count
GHI, JKL 2
私は次のように表示することができます:
他の2つの関税には、それらに関連するコードGHIとJKLがあります。これらのコードを関税1111に追加しますか?
これらの魔法を試してみてください:
SELECT Code, COUNT(*) AS Count
FROM (SELECT dbo.TariffCode.Tariff, dbo.TariffCode.Code
FROM dbo.TariffCode LEFT OUTER JOIN
(SELECT TariffCode_2.Tariff, TariffCode_2.Code
FROM dbo.TariffCode AS TariffCode_2 INNER JOIN
(SELECT Tariff, Code
FROM dbo.TariffCode AS TariffCode_1
WHERE (Tariff = '1111')) AS TariffsWithSharedCodes ON TariffCode_2.Code = TariffsWithSharedCodes.Code AND
TariffCode_2.Tariff <> '1111') AS MutualCodes ON dbo.TariffCode.Tariff = MutualCodes.Tariff AND
dbo.TariffCode.Code = MutualCodes.Code
WHERE (MutualCodes.Code IS NULL) AND (dbo.TariffCode.Tariff <> '1111')) AS MissingCodes
GROUP BY Code
ORDER BY Count DESC, Code
これはT-SQLです。申し訳ありませんが、あなたはアイデアを得るでしょう
以下のスクリプトがあなたを助けてくれることを願っています。 '1111 'だけでなく、すべての関税を得ることができます:
with temp as (
select tariffno, tariffno2, codeid
from (
select distinct c1.tariffno, c2.tariffno as tariffno2, c2.codeid
from tariffcode c1
join tariffcode c2 on c1.tariffno != c2.tariffno and c1.codeid != c2.codeid
) c1
where
not exists (select 1 from tariffcode where tariffno = c1.tariffno and codeid = c1.codeid)
)
select tariffno, codeid, count(*) as cnt from temp group by tariffno, codeid;