问题是这样的:
表1:Items
itemid itemName
1 名称1
2 名称2
3 名称3
表2:Result
resultid answer
1 1,3
2 3
3 2,3
4 1,2
两个表之间的关系是:Result表中的answer字段存储的是Items表中itemid字段以“,”为分隔符的id集合,现在想要的结果是:
itemid itemName num
1 名称1 2
2 名称2 1
3 名称3 3
也就是说:items表中的各行的id在Result表中出现的次数。
比如:itemid为1的在Result表的answer字段中出现了2次,num为2,itemid为3的行在Result表的answer字段中出现了3次,num为3...
请大家帮忙。
表1:Items
itemid itemName
1 名称1
2 名称2
3 名称3
表2:Result
resultid answer
1 1,3
2 3
3 2,3
4 1,2
两个表之间的关系是:Result表中的answer字段存储的是Items表中itemid字段以“,”为分隔符的id集合,现在想要的结果是:
itemid itemName num
1 名称1 2
2 名称2 1
3 名称3 3
也就是说:items表中的各行的id在Result表中出现的次数。
比如:itemid为1的在Result表的answer字段中出现了2次,num为2,itemid为3的行在Result表的answer字段中出现了3次,num为3...
请大家帮忙。
这个num字段是求出来的,如果itemid为1的在Result表的answer字段中出现了2次,那么num为2,如果itemid为3的行在Result表的answer字段中出现了3次,那么num为3...
我所需要的就是这个求出来的num,希望大家帮帮忙。谢谢了。
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+answer + ',',itemid) > 0 )
from Items
select
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+answer + ',',','+itemid+ ',') > 0 )
from Items
go
create table Items(itemid int, itemName nvarchar(10))
insert Items select 1, N'名称1'
insert Items select 2, N'名称2'
insert Items select 3, N'名称3'
if object_id('Result ')iS not null drop table Result
go
CREATE TABLE Result (resultid INT, answer VARCHAR(10))
INSERT Result SELECT 1 , '1,3'
INSERT Result SELECT 2 , '3'
INSERT Result SELECT 3, '2,3'
INSERT Result SELECT 4, '1,2'
SELECT I.itemid, I.itemName,(SELECT COUNT(*) FROM Result R WHERE CHARINDEX(','+RTRIM(I.ITEMID)+',',','+R.answer+',')>0) FROM ITEMS I
/*itemid itemName
----------- ---------- -----------
1 名称1 2
2 名称2 2
3 名称3 3*/
对数据类型而言运算符无效。运算符为 add,类型为 text。
水族杰论,你的语句都看不完啊?
就是那条语句 FROM ITEMS I...I后面是什么啊?能不能把语句换个行?谢谢了。
是不是浏览器有问题啊?
对数据类型而言运算符无效。运算符为 add,类型为 text。
怎么回事儿?
select
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+cast(answer as varchar(8000)) + ',',','+itemid+ ',') > 0 )
from Items
if object_id('Items')iS not null drop table Items
go
create table Items(itemid int, itemName ntext)
insert Items select 1, N'名称1'
insert Items select 2, N'名称2'
insert Items select 3, N'名称3'
if object_id('Result ')iS not null drop table Result
go
CREATE TABLE Result (resultid INT, answer ntext)
INSERT Result SELECT 1 , '1,3'
INSERT Result SELECT 2 , '3'
INSERT Result SELECT 3, '2,3'
INSERT Result SELECT 4, '1,2'
SELECT I.itemid, I.itemName,(SELECT COUNT(*) FROM Result R WHERE CHARINDEX(','+RTRIM(I.ITEMID)+',',','+cast(R.answer as nvarchar(4000))+',')>0) FROM ITEMS I
/*itemid itemName
----------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------
1 名称1 2
2 名称2 2
3 名称3 3
*/
数据类型 int 对于函数 charindex 无效。允许的类型为: char/varchar、nchar/nvarchar 和 binary/varbinary。
不过用水族杰论的倒是出来了。