SQL大大大难题……分类检索

微信公众号 2012-06-08 02:36:12
SQL大大难题啊,都愁白了我好几根头发,希望各位不吝赐教!问题如下:表A中的class字段中,前三行分别存有1 2 1,2 现在要和表B中的Type做关联,分别检索错1,2,3,4,……各种类别中都有多少数据,可是表A中的第三行,存有2个类别(最多的一条记录存了20个类别);那现在该怎么做关联,分类检索各个类别的总数据条数呢???
...全文
250 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
fl65782100 2012-06-08
  • 打赏
  • 举报
回复
噢~~对 学习了
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

麻烦楼主举例例子说明一下我的方法如何不能用,谢谢,没看出来。
[/Quote]
主要是逗号的问题,例如:
表A :
ID type
001 1
002 2
表B:
ID typeValue
01 1
02 2,10
现在我要检索类别是1的数据量,那么表B中只有1条;但你的sql语句,会检索出2条,它把类别10中的数字1也当做类别1给检索进来了……13楼的就把这个问题给过滤掉了
fl65782100 2012-06-08
  • 打赏
  • 举报
回复
麻烦楼主举例例子说明一下我的方法如何不能用,谢谢,没看出来。
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

外面再套一层查询是不是可以实现?引用 14 楼 的回复:
引用 12 楼 的回复:

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

语句……
[/Quote]
不用再嵌套了,这样已经实现了……
fl65782100 2012-06-08
  • 打赏
  • 举报
回复
外面再套一层查询是不是可以实现?[Quote=引用 14 楼 的回复:]
引用 12 楼 的回复:

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(*……
[/Quote]
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

引用 15 楼 的回复:

引用 13 楼 的回复:

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
S……
[/Quote]

三哥给的,确实指明了方向了;我看完后就立即改sql了,但改了一会,没改出来,自己脑子转的不快……最后说一句:我不喜欢衣来伸手饭来张口……
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

引用 13 楼 的回复:

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……
[/Quote]

三哥给你的是对的,改改直接好用。看来都是想衣来伸手,饭来张口啊
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

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
SELEC……
[/Quote]
Very Good !
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

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(*) fro……
[/Quote]

大体上是对的,可语句里没有考虑到逗号的问题,假如检索类别1的数据总量,那么类别10到19的也会计算进去的……13楼的,考虑到这个问题了,是正解
孤独加百列 2012-06-08
  • 打赏
  • 举报
回复

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
fl65782100 2012-06-08
  • 打赏
  • 举报
回复
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
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
类别表:
id name value
001 类别0 0
002 类别1 1
003 类别2 2
004 类别3 3
005 类别4 4
数据表:
id typeValue
0001 2
0002 0
0003 3
0004 0,2
0005 0,1,2
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

这个确实能检索到类别1的数据量,可我的类别全都放在表B中的Type字段中,那该怎么检索呢?引用 3 楼 的回复:

select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0


你能不能贴点完整的数据,和你期待的结果出来?
[/Quote]
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
我期待的结果如下:
ID name count
001 类别0 3
002 类别1 1
003 类别2 3
004 类别3 1
005 列别4 0
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

这个确实能检索到类别1的数据量,可我的类别全都放在表B中的Type字段中,那该怎么检索呢?引用 3 楼 的回复:

select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0


你能不能贴点完整的数据,和你期待的结果出来?
[/Quote]
fl65782100 2012-06-08
  • 打赏
  • 举报
回复
A 表:


B 表:


结果集:


语句:
select B.type,(select COUNT(*) from A where CHARINDEX(B.TYPE,A.CLASS,0)>0) from B
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

这个确实能检索到类别1的数据量,可我的类别全都放在表B中的Type字段中,那该怎么检索呢?引用 3 楼 的回复:

select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
[/Quote]

你能不能贴点完整的数据,和你期待的结果出来?
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
这个确实能检索到类别1的数据量,可我的类别全都放在表B中的Type字段中,那该怎么检索呢?[Quote=引用 3 楼 的回复:]

select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
[/Quote]
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
[/Quote]

三哥这样应该可以的。不过不知道能不能满足楼主的需求
koumingjie 2012-06-08
  • 打赏
  • 举报
回复
实在看不懂啊,图片传到个人空间的相册里
微信公众号 2012-06-08
  • 打赏
  • 举报
回复
我截图了,可是没找到上传本体图片的地方。。。[Quote=引用 2 楼 的回复:]

给出表结构和测试数据
[/Quote]
AcHerat 2012-06-08
  • 打赏
  • 举报
回复
select 1 as col,count(*) cnt
from tb
where charindex(',1,',','+typecol+',') > 0
加载更多回复(2)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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