有一表:table
字段如下
nameid sign
1,2,3,4,5,6 *,--,*,*,*,--,*
假如我以nameid=2或nameid=5的id登陆,从表中可以查询出对应的sign=--
假如我以nameid=3或。。。。。。。。。从表中可以查询出对应的sign=*
请问sql 能否实现。
希望高手给出意见。谢谢。
------解决方案--------------------
--你的内容不匹配,nameid少了一个.
create table A(nameid varchar(20),[sign] varchar(20))
insert into A(nameid,[sign]) values( '1,2,3,4,5,6,7 ', '*,--,*,*,*,--,* ')
go
-- 建立一个辅助的临时表就可以了
SELECT TOP 8000 id = identity(int,1,1)
INTO # FROM syscolumns a, syscolumns b
SELECT
id = identity(int,1,1),
[sign] = SUBSTRING(A.[sign], B.ID, CHARINDEX( ', ', A.[sign] + ', ', B.ID) - B.ID)
into tb1
FROM A, # B
WHERE SUBSTRING( ', ' + a.[sign], B.id, 1) = ', '
SELECT
id = identity(int,1,1),
nameid = SUBSTRING(A.nameid, B.ID, CHARINDEX( ', ', A.nameid + ', ', B.ID) - B.ID)
into tb2
FROM A, # B
WHERE SUBSTRING( ', ' + a.nameid, B.id, 1) = ', '
GO
select tb2.nameid , tb1.[sign] from tb2,tb1 where tb1.id = tb2.id
DROP TABLE A,#,tb1,tb2
/*
id sign
----------- --------------------
1 *
2 --
3 *
4 *
5 *
6 --
7 *
(所影响的行数为 7 行)
*/