CREATE TABLE [dbo].[tb_1](
[id] [int] IDENTITY(1,1) NOT NULL,
[bianhao] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[col] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[jiedian] [int] NULL)
go
insert into tb_1 (bianhao,col,jiedian)
select 2,'a1',1 Union all
select 2,'a3',2 Union all
select 2,'a3',1 Union all
select 2,'a3',4 Union all
select 2,'a5',1 Union all
select 2,'a8',2 Union all
select 2,'a8',3
gobianhao是固定的,就是每次查询都是固定的一个值,col取值范围 a1-a100,jiedian 取值范围 1-4.现在给定bianhao,和col,要求查出col有且jiedian=1或者col 不存在的col值是哪些.比如bianhao=2,col 为'a1','a4'时结果是'a1','a4';col为'a2','a8'时'a2'
我自己写了SQL,感觉不太好,请高手帮忙修改下select distinct col from tb_1 where bianhao=2 and col in('a1','a4') and jiedian=1
Union all
select case when not exists(select 1 from tb_1 where col='a1' and bianhao=2) then 'a1' end as col
Union all
select case when not exists(select 1 from tb_1 where col='a4' and bianhao=2) then 'a4' end as col
[id] [int] IDENTITY(1,1) NOT NULL,
[bianhao] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[col] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[jiedian] [int] NULL)
go
insert into tb_1 (bianhao,col,jiedian)
select 2,'a1',1 Union all
select 2,'a3',2 Union all
select 2,'a3',1 Union all
select 2,'a3',4 Union all
select 2,'a5',1 Union all
select 2,'a8',2 Union all
select 2,'a8',3
gobianhao是固定的,就是每次查询都是固定的一个值,col取值范围 a1-a100,jiedian 取值范围 1-4.现在给定bianhao,和col,要求查出col有且jiedian=1或者col 不存在的col值是哪些.比如bianhao=2,col 为'a1','a4'时结果是'a1','a4';col为'a2','a8'时'a2'
我自己写了SQL,感觉不太好,请高手帮忙修改下select distinct col from tb_1 where bianhao=2 and col in('a1','a4') and jiedian=1
Union all
select case when not exists(select 1 from tb_1 where col='a1' and bianhao=2) then 'a1' end as col
Union all
select case when not exists(select 1 from tb_1 where col='a4' and bianhao=2) then 'a4' end as col
set @s='a2,a8'
select @sql='select '''+replace(@s,',',''' as col union select ''')+''''set @sql='select distinct a.col from ('+@sql+') a join tb_1 b
on (not exists(select 1 from tb_1 where col=a.col and jiedian!=1) and a.col=b.col)
or not exists(select 1 from tb_1 where col=a.col)'exec (@sql)
declare @s varchar(100)
set @s='a1,a4'--参数在此替换
set @s=@s+','
;with cte as (
select col=substring(@s,1,charindex(',',@s)-1),i=charindex(',',@s)
union all
select substring(@s,cte.i+1,charindex(',',@s,cte.i+1)-cte.i-1),i=charindex(',',@s,cte.i+1)
from cte
where charindex(',',@s,cte.i+1)>0
)
select a.col from cte a
full join tb_1 b on a.col=b.col
where (b.jiedian =1 and a.col is not null) or b.col is null