我有下表:
Declare @t table (Name nvarchar(80))
Insert into @t values
('ABC:CE')
,('ABC:LI')
,('ABC:XP')
,('ABD:CE')
,('ABD:LI')
,('ABE:LI')
,('ABE:XP')
,('ABF:XP')
我有3个类别,CE,LI,XP。我想检查名称中缺少哪个组。
我试过下面的查询:
select SUBSTRING(Name,1,charindex(':',Name)-1),count(1) as grplist from @t
group by SUBSTRING(Name,1,charindex(':',Name)-1)
having count(1) <3
预期产量:
Name
ABD:XP
ABE:CE
ABF:LI
ABF:CE
你们能帮我解决我的问题吗:
尝试这个:
Declare @t table (Name nvarchar(80))
Insert into @t values
('ABC:CE')
,('ABC:LI')
,('ABC:XP')
,('ABD:CE')
,('ABD:LI')
,('ABE:LI')
,('ABE:XP')
,('ABF:XP');
WITH DataSource ([group], [category]) AS
(
SELECT SUBSTRING([Name], 1, CHARINDEX(':', [Name]) - 1)
,SUBSTRING([Name], CHARINDEX(':', [Name]) + 1, 100)
FROM @t
)
SELECT DISTINCT G.[group], C.[category]
FROM DataSource G
CROSS APPLY
(
SELECT DISTINCT [category]
FROM DataSource
) C
WHERE NOT EXISTS
(
SELECT 1
FROM DataSource DS
WHERE DS.[group] = G.[group]
AND DS.[category] = C.[category]
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句