首页 新闻 会员 周边 捐助

SQL Like 子查询 问题

0
悬赏园豆:50 [已解决问题] 解决于 2015-03-03 16:50

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
kaolasz的主页 kaolasz | 初学一级 | 园豆:5
提问于:2015-03-03 12:11
< >
分享
最佳答案
0

charindex(cid,type)>0

收获园豆:40
KingMi | 小虾三级 |园豆:1344 | 2015-03-03 13:44

这样写也不行啊

kaolasz | 园豆:5 (初学一级) | 2015-03-03 13:55

@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
KingMi | 园豆:1344 (小虾三级) | 2015-03-03 14:22

@?,????: 确实不行啊,我都急死了

kaolasz | 园豆:5 (初学一级) | 2015-03-03 15:11

@Cloudoit: 把你执行的脚本和错误贴出来

KingMi | 园豆:1344 (小虾三级) | 2015-03-03 15:28

@?,????: 没开通博客上传不了图,执行没错,但是Count一直是0,本来分类里面是有数据的,可以加我Q2325671606帮我下吗

kaolasz | 园豆:5 (初学一级) | 2015-03-03 15:36

@Cloudoit: 我知道了,是不是弄反了,改一下看看 charindex(type,t.cid)>0

KingMi | 园豆:1344 (小虾三级) | 2015-03-03 15:42

@Cloudoit: 仔细看看表opn_ServicePro里的字段type,以及表opn_Category里的字段CId,两者的内容是否有关联?

KingMi | 园豆:1344 (小虾三级) | 2015-03-03 15:56

@?,????: 还是不行啊.我要崩溃了

kaolasz | 园豆:5 (初学一级) | 2015-03-03 16:03

@?,????: 我已经更新问题了,上面贴了表结构和数据,以及执行结果,帮帮看看吧

kaolasz | 园豆:5 (初学一级) | 2015-03-03 16:13

@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

KingMi | 园豆:1344 (小虾三级) | 2015-03-03 16:16

@?,????: 果然是空格问题,谢谢大侠,问题解决了 :)

kaolasz | 园豆:5 (初学一级) | 2015-03-03 16:49
其他回答(3)
0

'%' + CId + '%' 你CId 是传入的参数  还是用的表字段中的Cid 如果示字段就不能这样写了

夜行侠 | 园豆:102 (初学一级) | 2015-03-03 13:10

Cid是表中的字段应该怎么写呢?

 

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 13:41
0

Type是什么类型呢?

收获园豆:10
幻天芒 | 园豆:37207 (高人七级) | 2015-03-03 13:17

Type 是表中字段,所以我用中括号

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 13:42

@Cloudoit: 我是想问数据类型。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2015-03-03 13:56

@幻天芒: Type 是nvarchar , CId也是 

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 15:10

@Cloudoit: 你在cid前面加上表名,xxx.Cid看看。

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2015-03-03 15:17

@幻天芒: 这样是不行的

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 15:23

@Cloudoit: count(id),id有没有可能是null?修改为count(0)看看。看不到数据,只能猜原因...

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2015-03-03 15:52

@Cloudoit: 另外你的数据类型是nvarchar,所以还可以尝试下like N'%' + cid + N'%'

支持(0) 反对(0) 幻天芒 | 园豆:37207 (高人七级) | 2015-03-03 15:56

@幻天芒: 不行啊...

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 16:07

@幻天芒: 我已经更新问题了,上面贴了表结构和数据,以及执行结果,帮帮看看吧

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 16:13
0

opn_ServicePro   表是不是也有CId 字段?

Yu | 园豆:12990 (专家六级) | 2015-03-03 15:00

opn_ServicePro   中没有Cid字段的

支持(0) 反对(0) kaolasz | 园豆:5 (初学一级) | 2015-03-03 15:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册