SQL大大大难题…分类检索解决思路
SQL大大大难题……分类检索
SQL大大难题啊,都愁白了我好几根头发,希望各位不吝赐教!问题如下:表A中的class字段中,前三行分别存有1 2 1,2 现在要和表B中的Type做关联,分别检索错1,2,3,4,……各种类别中都有多少数据,可是表A中的第三行,存有2个类别(最多的一条记录存了20个类别);那现在该怎么做关联,分类检索各个类别的总数据条数呢???
------解决方案--------------------
select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
------解决方案--------------------
A 表:
id class
1 1
2 2
3 1,2
4 1,3
5 2,3,4
6 5
B 表:
id type
1 1
2 2
3 3
4 4
5 5
6 6
结果集:
type 个数
1 3
2 3
3 2
4 1
5 1
6 0
语句:
select B.type,(select COUNT(*) from A where CHARINDEX(B.TYPE,A.CLASS,0)>0) from B
------解决方案--------------------
SQL大大难题啊,都愁白了我好几根头发,希望各位不吝赐教!问题如下:表A中的class字段中,前三行分别存有1 2 1,2 现在要和表B中的Type做关联,分别检索错1,2,3,4,……各种类别中都有多少数据,可是表A中的第三行,存有2个类别(最多的一条记录存了20个类别);那现在该怎么做关联,分类检索各个类别的总数据条数呢???
------解决方案--------------------
select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
------解决方案--------------------
A 表:
id class
1 1
2 2
3 1,2
4 1,3
5 2,3,4
6 5
B 表:
id type
1 1
2 2
3 3
4 4
5 5
6 6
结果集:
type 个数
1 3
2 3
3 2
4 1
5 1
6 0
语句:
select B.type,(select COUNT(*) from A where CHARINDEX(B.TYPE,A.CLASS,0)>0) from B
------解决方案--------------------
- SQL code
CREATE TABLE 类别表 ( id VARCHAR(10), name VARCHAR(10), value INT ) GO INSERT INTO 类别表 SELECT '001', '类别0', 0 UNION SELECT '002', '类别1', 1 UNION SELECT '003', '类别2', 2 UNION SELECT '004', '类别3', 3 UNION SELECT '005', '类别4', 4 GO CREATE TABLE 数据表 ( id VARCHAR(10), typeValue VARCHAR(100) ) GO INSERT INTO 数据表 SELECT '0001', '2' UNION SELECT '0002', '0' UNION SELECT '0003', '3' UNION SELECT '0004', '0,2' UNION SELECT '0005', '0,1,2' GO SELECT A.ID,name,value,COUNT(1) AS Num FROM 类别表 AS A INNER JOIN 数据表 AS B ON CHARINDEX(',' + CAST(A.value AS VARCHAR(10)) + ',',',' + B.typeValue + ',') > 0 GROUP BY A.ID,name,value ID name value Num 001 类别0 0 3 002 类别1 1 1 003 类别2 2 3 004 类别3 3 1