进行综合查询的问题

zhuanshen712 2008-12-01 11:41:52
问题是这样的:
表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...
请大家帮忙。
...全文
82 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
谢了!
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
老高你的怎么提示:
数据类型 int 对于函数 charindex 无效。允许的类型为: char/varchar、nchar/nvarchar 和 binary/varbinary。
不过用水族杰论的倒是出来了。
水族杰纶 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhuanshen712 的回复:]
可是也提示和老高一样的错误啊?
对数据类型而言运算符无效。运算符为 add,类型为 text。
怎么回事儿?
[/Quote]
--如果TEXT類型不超過8000 轉換下 cast()
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
*/
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
charindex("所查找的字符串","被查找的字符串")
hyde100 2008-12-01
  • 打赏
  • 举报
回复
--text-》varchar
select
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+cast(answer as varchar(8000)) + ',',','+itemid+ ',') > 0 )
from Items
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
可是也提示和老高一样的错误啊?
对数据类型而言运算符无效。运算符为 add,类型为 text。
怎么回事儿?
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
哦,呵呵,知道了,那个i就是结束是吧?呵呵,没仔细看。不好意思啊。
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
老高你的语句提示:
对数据类型而言运算符无效。运算符为 add,类型为 text。
水族杰论,你的语句都看不完啊?
就是那条语句 FROM ITEMS I...I后面是什么啊?能不能把语句换个行?谢谢了。
是不是浏览器有问题啊?

水族杰纶 2008-12-01
  • 打赏
  • 举报
回复
if object_id('Items')iS not null drop table  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*/
hyde100 2008-12-01
  • 打赏
  • 举报
回复
这个~
select 
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+answer + ',',','+itemid+ ',') > 0 )
from Items
hyde100 2008-12-01
  • 打赏
  • 举报
回复
select 
itemid,
itemName ,
num =(select count(1) my_count from Result where charindex(','+answer + ',',itemid) > 0 )
from Items
zhuanshen712 2008-12-01
  • 打赏
  • 举报
回复
可能说的有点儿不明白:
这个num字段是求出来的,如果itemid为1的在Result表的answer字段中出现了2次,那么num为2,如果itemid为3的行在Result表的answer字段中出现了3次,那么num为3...
我所需要的就是这个求出来的num,希望大家帮帮忙。谢谢了。
ws_hgo 2008-12-01
  • 打赏
  • 举报
回复
看下

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧