select Id,Title,CId,Pid,Deep,SortId,
(select COUNT(id) from opn_ServicePro where [Type] like '%'+CId+'%') as [Count]
from opn_Category order by Deep,SortId
2张表 opn_Category 分类
opn_ServicePro 产品
查询每个分类下有多少产品, 但是数字总是0
问题在CId这里,如果把CId替换成具体分类就能查出来,CId 是nvarchar,转类型也试过了,没用
求解
这是查出来的结果
Id Title CId Pid Deep SortId Count 1 本地服务 010000 0 0 1 0 2 在线服务 020000 0 0 1 0 3 店铺/装修 010100 1 1 0 0 5 店铺/装修 020100 2 1 0 0 10 O2O服务 010300 1 1 0 0 12 代办业务 010400 1 1 0 0 14 餐厅预定 010301 10 2 0 0 15 代办跑腿 010401 12 2 0 0 6 个性设计 020101 5 2 0 0 7 行业店铺插件 010102 3 2 0 0 8 行业店铺插件 020102 5 2 0 0 4 个性设计 010101 3 2 0 0
这是ServicePro表
id Eid Title Type1 Type2 Type3 Type SaleType 83 3 测试 010000 010100 010101 010000,010100,010101 1 84 3 测试 010000 010100 010101 010000,010100,010101 1 85 3 测试 010000 010100 010101 010000,010100,010101 1 86 3 测试 010000 010100 010101 010000,010100,010101 1 88 3 测试 010000 010300 010301 010000,010300,010301 1
这是Category表
Id Title CId Pid 1 本地服务 010000 0 2 在线服务 020000 0 3 店铺/装修 010100 1 4 个性设计 010101 3 5 店铺/装修 020100 2 6 个性设计 020101 5 7 行业店铺插件 010102 3 8 行业店铺插件 020102 5 10 O2O服务 010300 1 12 代办业务 010400 1 14 餐厅预定 010301 10 15 代办跑腿 010401 12
charindex(cid,type)>0
这样写也不行啊
@Cloudoit: 怎么会,你再试试。
SELECT Id, Title, CId, Pid, Deep, SortId, ( SELECT COUNT(id) FROM opn_ServicePro WHERE charindex(t.cid,type)>0 ) AS [Count] FROM opn_Category AS t ORDER BY Deep, SortId
@?,????: 确实不行啊,我都急死了
@Cloudoit: 把你执行的脚本和错误贴出来
@?,????: 没开通博客上传不了图,执行没错,但是Count一直是0,本来分类里面是有数据的,可以加我Q2325671606帮我下吗
@Cloudoit: 我知道了,是不是弄反了,改一下看看 charindex(type,t.cid)>0
@Cloudoit: 仔细看看表opn_ServicePro里的字段type,以及表opn_Category里的字段CId,两者的内容是否有关联?
@?,????: 还是不行啊.我要崩溃了
@?,????: 我已经更新问题了,上面贴了表结构和数据,以及执行结果,帮帮看看吧
@Cloudoit: 冷静下来,试试这个比较耸的方法:
select *,(select count(1) from opn_ServicePro s where s.type1=c.cid or s.type2=c.cid or s.type3=c.cid ) from opn_Category c
我怀疑CId字段里的数据是不是有空格啊,改一下:
SELECT Id,Title, CId, Pid, Deep, SortId,
(
SELECT COUNT(1) FROM opn_ServicePro s
WHERE charindex(LTRIM(RTRIM(t.cid)),s.type)>0
) AS [Count]
FROM opn_Category AS t ORDER BY Deep,SortId
@?,????: 果然是空格问题,谢谢大侠,问题解决了 :)
'%' + CId + '%' 你CId 是传入的参数 还是用的表字段中的Cid 如果示字段就不能这样写了
Cid是表中的字段应该怎么写呢?
Type是什么类型呢?
Type 是表中字段,所以我用中括号
@Cloudoit: 我是想问数据类型。
@幻天芒: Type 是nvarchar , CId也是
@Cloudoit: 你在cid前面加上表名,xxx.Cid看看。
@幻天芒: 这样是不行的
@Cloudoit: count(id),id有没有可能是null?修改为count(0)看看。看不到数据,只能猜原因...
@Cloudoit: 另外你的数据类型是nvarchar,所以还可以尝试下like N'%' + cid + N'%'
@幻天芒: 不行啊...
@幻天芒: 我已经更新问题了,上面贴了表结构和数据,以及执行结果,帮帮看看吧
opn_ServicePro 表是不是也有CId 字段?
opn_ServicePro 中没有Cid字段的