Here is the solution; there certainly is room for optimization:
DECLARE @Word VARCHAR(8) = 'Stack'
DECLARE @Avail VARCHAR(8) = 'ACKST'
DECLARE @Letters TABLE
(
Letter CHAR(1) NOT NULL PRIMARY KEY,
NumNeeded INT NOT NULL,
NumAvailable INT NOT NULL
)
INSERT INTO @Letters (Letter, NumNeeded, NumAvailable)
SELECT
R.Letter, R.NumNeeded, COALESCE(A.NumAvailable, 0) AS NumAvailable
FROM
(
SELECT
Letter, COUNT(*) AS NumNeeded
FROM
(
SELECT UPPER(SUBSTRING(@Word, N.Number, 1)) AS Letter
FROM Numbers AS N
WHERE N.Number BETWEEN 1 AND LEN(@Word)
) AS X
GROUP BY
Letter
) AS R
LEFT JOIN
(
SELECT
Letter, COUNT(*) AS NumAvailable
FROM
(
SELECT UPPER(SUBSTRING(@Avail, N.Number, 1)) AS Letter
FROM Numbers AS N
WHERE N.Number BETWEEN 1 AND LEN(@Word)
) AS X
GROUP BY
Letter
) AS A ON R.Letter = A.Letter
SELECT CASE WHEN EXISTS (SELECT * FROM @Letters WHERE NumNeeded > NumAvailable) THEN 'No' ELSE 'Yes' END AS OK
, Numbers.
user565869