4

私はSQLテーブルとしてこのようなものを持っています:

EmplID スキル  ID
1780 128
1780 133
2061 128
2068 128

「128,133」のようにストアド プロシージャに文字列を渡すとします。分割関数があるため、SQL は次のようになります。

SELECT DISTINCT EmplID
FROM EmplSkills
WHERE SkillID IN(SELECT data FROM dbo.Split(@Skills, ','))

SQL ステートメントで 1780、2061、および 2068 を取得することが簡単にわかります。私が本当に必要としているのは、スキル ID として 128 と 133 の両方を持つ EmplID を取得することです。これにより、1780 のみを取得する必要があります。

たくさんのクレイジーな結合なしでこれにアプローチする方法はありますか?

本当にありがとう。

4

1 に答える 1

6
SELECT EmplID
FROM EmplSkills
WHERE SkillID IN(SELECT data FROM dbo.Split(@Skills, ','))
GROUP BY EmplID
HAVING COUNT(DISTINCT SkillID) = (SELECT COUNT(*) FROM dbo.Split(@Skills, ','))

または、SQL Server を使用している場合は、CTE を使用して作業を楽にすることができます。

; WITH Skills AS (
    SELECT DISTINCT data
    FROM dbo.Split(@Skills, ',')
)
SELECT EmplID
FROM EmplSkills
WHERE SkillID IN ( SELECT data FROM Skills )
GROUP BY EmplID
HAVING COUNT(DISTINCT SkillID) = (SELECT COUNT(*) FROM Skills)
于 2012-06-10T18:46:04.220 に答える