SQL递归求助?
时间:2011-12-02
来源:互联网
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT);
DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT);
INSERT INTO @tableA
SELECT '000',1 UNION ALL
SELECT 'AAA001',1 UNION ALL
SELECT 'AAABBB001',1 UNION ALL
SELECT 'XXXXX001',2 UNION ALL
SELECT 'XXXXXYYYYY001',1
INSERT INTO @tableB
SELECT '000','000',0 UNION ALL
SELECT 'AAA001','000',1 UNION ALL
SELECT 'AAABBB001','AAA001',2 UNION ALL
SELECT 'XXXXX001','AAABBB001',3 UNION ALL
SELECT 'XXXXXYYYYY001','XXXXX001',4
SELECT * FROM @tableB
--结果是 :BID表示的是编号,ShangJiB上级编号,Number 级别,如果BID的上级编号有一个是Type为2的,就返回2,否则就返回1
/*编号 类型
000 1
AAA001 1
AAABBB001 1
XXXXX001 2
XXXXXYYYYY001 2
*/
作者: liangyong1107 发布时间: 2011-12-02
作者: fredrickhu 发布时间: 2011-12-02
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT); DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT); INSERT INTO @tableA SELECT '000',1 UNION ALL SELECT 'AAA001',1 UNION ALL SELECT 'AAABBB001',1 UNION ALL SELECT 'XXXXX001',2 UNION ALL SELECT 'XXXXXYYYYY001',1 INSERT INTO @tableB SELECT '000','',0 UNION ALL --'000' 的上级不能为自身 SELECT 'AAA001','000',1 UNION ALL SELECT 'AAABBB001','AAA001',2 UNION ALL SELECT 'XXXXX001','AAABBB001',3 UNION ALL SELECT 'XXXXXYYYYY001','XXXXX001',4 ;with cte as( select a.*,(case when b.type=2 then 2 else 1 end)type from @tableB a inner join @tableA b on a.bid=b.aid where a.shangjib='' union all select a.*,(case when b.type=2 or c.type=2 then 2 else 1 end) from @tableB a inner join @tableA b on a.bid=b.aid inner join cte c on a.shangjib=c.bid )select * from cte /* BID ShangJiB Number type -------------------------------------------------- -------------------------------------------------- ----------- ----------- 000 0 1 AAA001 000 1 1 AAABBB001 AAA001 2 1 XXXXX001 AAABBB001 3 2 XXXXXYYYYY001 XXXXX001 4 2 (5 行受影响) */
作者: qianjin036a 发布时间: 2011-12-02
等大版或者小三来解决。
哈哈.我抢位了.....
作者: qianjin036a 发布时间: 2011-12-02
类别=case when exists(select 1 from A where AID=t.ShangJiB and type=2) then 2 else 1 end
from B t
作者: ssp2009 发布时间: 2011-12-02
引用 1 楼 fredrickhu 的回复:
等大版或者小三来解决。
哈哈.我抢位了.....
你解决不是一样么?也是大大级别的
作者: fredrickhu 发布时间: 2011-12-02
作者: liangyong1107 发布时间: 2011-12-02
SQL code
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT);
DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT);
INSERT INTO @tableA
SELECT '000',1 UNION ALL
SELECT 'AAA001',……
不修改 000可否实现吗?
作者: liangyong1107 发布时间: 2011-12-02
引用 2 楼 qianjin036a 的回复:
SQL code
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT);
DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT);
INSERT INTO @tableA
SELECT '000',1 U……
程序要改一下,否则是死循环.
作者: qianjin036a 发布时间: 2011-12-02
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT); DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT); INSERT INTO @tableA SELECT '000',1 UNION ALL SELECT 'AAA001',1 UNION ALL SELECT 'AAABBB001',1 UNION ALL SELECT 'XXXXX001',2 UNION ALL SELECT 'XXXXXYYYYY001',1 INSERT INTO @tableB SELECT '000','000',0 UNION ALL --'000' 的上级不能为自身 SELECT 'AAA001','000',1 UNION ALL SELECT 'AAABBB001','AAA001',2 UNION ALL SELECT 'XXXXX001','AAABBB001',3 UNION ALL SELECT 'XXXXXYYYYY001','XXXXX001',4 ;with cte as( select a.*,(case when b.type=2 then 2 else 1 end)type from @tableB a inner join @tableA b on a.bid=b.aid where a.bid=a.shangjib union all select a.*,(case when b.type=2 or c.type=2 then 2 else 1 end) from @tableB a inner join @tableA b on a.bid=b.aid inner join cte c on a.shangjib=c.bid where a.bid<>a.shangjib )select * from cte /* BID ShangJiB Number type -------------------------------------------------- -------------------------------------------------- ----------- ----------- 000 0 1 AAA001 000 1 1 AAABBB001 AAA001 2 1 XXXXX001 AAABBB001 3 2 XXXXXYYYYY001 XXXXX001 4 2 (5 行受影响) */
作者: qianjin036a 发布时间: 2011-12-02
SQL code
DECLARE @tableA TABLE(AID VARCHAR(50),[TYPE] INT);
DECLARE @tableB TABLE(BID VARCHAR(50),ShangJiB VARCHAR(50),Number INT);
INSERT INTO @tableA
SELECT '000',1 UNION ALL
SELECT 'AAA001',……
谢谢晴天大哥
作者: liangyong1107 发布时间: 2011-12-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28