日期:2014-05-18  浏览次数:20473 次

请教通过sql能否实现如下功能
有一表: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 行)
*/