日期:2014-05-18  浏览次数:20340 次

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 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