我不确定在另一个问题中是否存在这种确切情况,如果这是重复的话,那就很抱歉。我在使用的类别系统有问题我有以下查询(例如)
SELECT DISTINCT COUNT(StockID)
FROM tblStock
WHERE CategoryCode IN (
SELECT CategoryCode
FROM tblLookup
WHERE CategoryID = 'EG')
我需要在tblLookup中的CategoryCode和tblStock中的类别代码之间进行部分匹配 - 上面的查询返回完整匹配,例如EG将ETC和EGT作为返回的类别代码,但是如果类别是ETCE那么这将是找不到。
我如何修改查询以便从以下结果返回结果:
SELECT CategoryCode
FROM tblLookup
WHERE CategoryID = 'EG'
可用于tblStock中的部分匹配,其中返回的CategoryCodes是ETC和EGT,但也需要通配符匹配。
答案 0 :(得分:2)
SELECT COUNT(StockID)
FROM (
SELECT DISTINCT '%' + CategoryCode + '%' AS Expr
FROM tblLookup
WHERE CategoryID = 'EG'
) cats
JOIN tblStock s
ON s.CategoryCode LIKE cats.Expr
要重现的示例脚本:
DECLARE @tblStock TABLE (StockID INT NOT NULL, CategoryCode VARCHAR(100) NOT NULL, quantity FLOAT NOT NULL)
DECLARE @tblLookup TABLE (CategoryID VARCHAR(100) NOT NULL, CategoryCode VARCHAR(100) NOT NULL)
INSERT
INTO @tblStock
VALUES (1, 'ETCE', 100)
INSERT
INTO @tblStock
VALUES (2, 'ETC', 200)
INSERT
INTO @tblStock
VALUES (3, 'FOO', 300)
INSERT
INTO @tblLookup
VALUES ('EG', 'ETC')
INSERT
INTO @tblLookup
VALUES ('EG', 'EGT')
SELECT *
FROM (
SELECT DISTINCT '%' + CategoryCode + '%' AS Expr
FROM @tblLookup
WHERE CategoryID = 'EG'
) cats
JOIN @tblStock s
ON s.CategoryCode LIKE cats.Expr