求一sql 只有2级还是有多级?另外SQL Server的版本是多少? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --create table tb1(id varchar(3) , fatherid varchar(3) , name Nvarchar(10))--insert into tb1 values('1' , '0' , N'大类1')--insert into tb1 values('2' , '0' , N'大类2')--insert into tb1 values('3' , '0' , N'大类3')--insert into tb1 values('4' , '1' , N'小类1')--insert into tb1 values('5' , '1' , N'小类2')--insert into tb1 values('6' , '2' , N'小类3')--insert into tb1 values('7' , '2' , N'小类4')--insert into tb1 values('8' , '2' , N'小类5')--insert into tb1 values('9' , '3' , N'小类6')--insert into tb1 values('10' , '3' ,N'小类7')--go----fatherid=0为父级--create table tb2(id varchar(3) , categoryid varchar(3) , name Nvarchar(10))--insert into tb2 values('1' , '1' , N'产品a')--insert into tb2 values('2' , '2' , N'产品b')--insert into tb2 values('3' , '3' , N'产品c')--insert into tb2 values('4' , '4' , N'产品d')--insert into tb2 values('5' , '5' , N'产品e')--insert into tb2 values('6' , '6' , N'产品f')--insert into tb2 values('7' , '7' , N'产品g')--insert into tb2 values('8' , '8' , N'产品h')--insert into tb2 values('9' , '9' , N'产品i')--insert into tb2 values('10' , '10' , N'产品j')--go--tb1.id=tb2.categoryid--怎么得到下面,得到从属于自己的产品和子级产品的个数--id fatherid name num--1 0 大类1 3--2 0 大类2 4--3 0 大类3 3SELECT tb1.id,tb1.fatherid,tb1.NAME,(SELECT COUNT(b.NAME) FROM tb1 b WHERE fatherid=tb1.id and fatherid<>0)+COUNT(tb1.name)numFROM tb1 LEFT JOIN tb2 ON tb1.id=tb2.categoryidWHERE fatherid=0GROUP BY tb1.id,tb1.fatherid,tb1.NAME/*id fatherid NAME num---- -------- ---------- -----------1 0 大类1 32 0 大类2 43 0 大类3 3*/ DROP TABLE tb1GOcreate table tb1(id varchar(3) , fatherid varchar(3) , name nvarchar(10))GOinsert into tb1 values('1' , '0' , N'大类1')insert into tb1 values('2' , '0' , N'大类2')insert into tb1 values('3' , '0' , N'大类3')insert into tb1 values('4' , '1' , N'小类1')insert into tb1 values('5' , '1' , N'小类2')insert into tb1 values('6' , '2' , N'小类3')insert into tb1 values('7' , '2' , N'小类4')insert into tb1 values('8' , '2' , N'小类5')insert into tb1 values('9' , '3' , N'小类6')insert into tb1 values('10' , '3' , N'小类7')go--fatherid=0为父级DROP TABLE tb2 gocreate table tb2(id varchar(3) , categoryid varchar(3) , name nvarchar(10))GOinsert into tb2 values('1' , '1' , N'产品a')insert into tb2 values('2' , '2' , N'产品b')insert into tb2 values('3' , '3' , N'产品c')insert into tb2 values('4' , '4' , N'产品d')insert into tb2 values('5' , '5' , N'产品e')insert into tb2 values('6' , '6' , N'产品f')insert into tb2 values('7' , '7' , N'产品g')insert into tb2 values('8' , '8' , N'产品h')insert into tb2 values('9' , '9' , N'产品i')insert into tb2 values('10' , '10' , N'产品j')goDECLARE @fatherid VARCHAR(10) = '0';WITH a AS ( SELECT id, fatherid, NAME, ID AS ID_f, NAME AS name_f FROM tb1 AS t WHERE t.fatherid = @fatherid UNION ALL SELECT tb1.id, tb1.fatherid, tb1.NAME, a.id AS id_f, a.name AS name_f FROM tb1 JOIN a ON tb1.fatherid = a.id )SELECT a.id_f, @fatherid AS fatherid, a.NAME_f, COUNT(1) AS numFROM tb2 INNER JOIN a ON tb2.categoryid = a.idGROUP BY a.id_f, a.NAME_f /*id_f fatherid NAME_f num---- ---------- ---------- -----------1 0 大类1 32 0 大类2 43 0 大类3 3(3 個資料列受到影響)*/ 没有产品自然是0num=大类所属产品+大类子级所属产品 本身是不包括在内的,因为不是“产品” --create table tb1(id varchar(3) , fatherid varchar(3) , name Nvarchar(10))--insert into tb1 values('1' , '0' , N'大类1')--insert into tb1 values('2' , '0' , N'大类2')--insert into tb1 values('3' , '0' , N'大类3')----insert into tb1 values('4' , '1' , N'小类1')----insert into tb1 values('5' , '1' , N'小类2')----insert into tb1 values('6' , '2' , N'小类3')----insert into tb1 values('7' , '2' , N'小类4')----insert into tb1 values('8' , '2' , N'小类5')----insert into tb1 values('9' , '3' , N'小类6')----insert into tb1 values('10' , '3' ,N'小类7')----go----fatherid=0为父级--create table tb2(id varchar(3) , categoryid varchar(3) , name Nvarchar(10))--insert into tb2 values('1' , '1' , N'产品a')--insert into tb2 values('2' , '2' , N'产品b')--insert into tb2 values('3' , '3' , N'产品c')--insert into tb2 values('4' , '4' , N'产品d')--insert into tb2 values('5' , '5' , N'产品e')--insert into tb2 values('6' , '6' , N'产品f')--insert into tb2 values('7' , '7' , N'产品g')--insert into tb2 values('8' , '8' , N'产品h')--insert into tb2 values('9' , '9' , N'产品i')--insert into tb2 values('10' , '10' , N'产品j')--go--tb1.id=tb2.categoryid--怎么得到下面,得到从属于自己的产品和子级产品的个数--id fatherid name num--1 0 大类1 3--2 0 大类2 4--3 0 大类3 3;WITH cte AS (SELECT a.id ,a.fatherid ,a.NAME ,COUNT(b.name)numFROM tb1 a LEFT JOIN tb2 b ON a.id=b.categoryidGROUP BY a.id ,a.fatherid ,a.NAME )SELECT a.id,a.fatherid,a.NAME,(SELECT SUM(num) FROM cte b WHERE b.fatherid=a.id AND b.fatherid<>0)+a.num numFROM cte aWHERE a.fatherid=0/*id fatherid NAME num---- -------- ---------- -----------1 0 大类1 32 0 大类2 43 0 大类3 3*/ SELECT 语句请教 插入多条数据 的问题~~~ 如何将表的每行数据在最后面来一个总计... 一个一对多的查询问题,请帮忙!!! 貼一個我寫的關於生產排程的存儲過程。還不完善,目前隻針對單個訂單,沒有考慮到訂單沖突 如果两台机子同时对数据库的一个表进行改写,SQL server能自动调解吗?还是要在程序中通过代码来实现 一个简单的存储过程 大规模数据库程序该怎么写? 如何判断表中那个字段是外键约束,哪个是主键,那个是索引! 很急 delphi和oracle????强强联合? 求助,写一个触发器+事务 请教一条查询语句
--create table tb1(id varchar(3) , fatherid varchar(3) , name Nvarchar(10))
--insert into tb1 values('1' , '0' , N'大类1')
--insert into tb1 values('2' , '0' , N'大类2')
--insert into tb1 values('3' , '0' , N'大类3')
--insert into tb1 values('4' , '1' , N'小类1')
--insert into tb1 values('5' , '1' , N'小类2')
--insert into tb1 values('6' , '2' , N'小类3')
--insert into tb1 values('7' , '2' , N'小类4')
--insert into tb1 values('8' , '2' , N'小类5')
--insert into tb1 values('9' , '3' , N'小类6')
--insert into tb1 values('10' , '3' ,N'小类7')
--go
----fatherid=0为父级--create table tb2(id varchar(3) , categoryid varchar(3) , name Nvarchar(10))
--insert into tb2 values('1' , '1' , N'产品a')
--insert into tb2 values('2' , '2' , N'产品b')
--insert into tb2 values('3' , '3' , N'产品c')
--insert into tb2 values('4' , '4' , N'产品d')
--insert into tb2 values('5' , '5' , N'产品e')
--insert into tb2 values('6' , '6' , N'产品f')
--insert into tb2 values('7' , '7' , N'产品g')
--insert into tb2 values('8' , '8' , N'产品h')
--insert into tb2 values('9' , '9' , N'产品i')
--insert into tb2 values('10' , '10' , N'产品j')
--go--tb1.id=tb2.categoryid--怎么得到下面,得到从属于自己的产品和子级产品的个数
--id fatherid name num
--1 0 大类1 3
--2 0 大类2 4
--3 0 大类3 3SELECT tb1.id,tb1.fatherid,tb1.NAME,(SELECT COUNT(b.NAME) FROM tb1 b WHERE fatherid=tb1.id and fatherid<>0)+COUNT(tb1.name)num
FROM tb1 LEFT JOIN tb2 ON tb1.id=tb2.categoryid
WHERE fatherid=0
GROUP BY tb1.id,tb1.fatherid,tb1.NAME
/*
id fatherid NAME num
---- -------- ---------- -----------
1 0 大类1 3
2 0 大类2 4
3 0 大类3 3
*/
GO
create table tb1(id varchar(3) , fatherid varchar(3) , name nvarchar(10))
GO
insert into tb1 values('1' , '0' , N'大类1')
insert into tb1 values('2' , '0' , N'大类2')
insert into tb1 values('3' , '0' , N'大类3')
insert into tb1 values('4' , '1' , N'小类1')
insert into tb1 values('5' , '1' , N'小类2')
insert into tb1 values('6' , '2' , N'小类3')
insert into tb1 values('7' , '2' , N'小类4')
insert into tb1 values('8' , '2' , N'小类5')
insert into tb1 values('9' , '3' , N'小类6')
insert into tb1 values('10' , '3' , N'小类7')
go
--fatherid=0为父级
DROP TABLE tb2
go
create table tb2(id varchar(3) , categoryid varchar(3) , name nvarchar(10))
GO
insert into tb2 values('1' , '1' , N'产品a')
insert into tb2 values('2' , '2' , N'产品b')
insert into tb2 values('3' , '3' , N'产品c')
insert into tb2 values('4' , '4' , N'产品d')
insert into tb2 values('5' , '5' , N'产品e')
insert into tb2 values('6' , '6' , N'产品f')
insert into tb2 values('7' , '7' , N'产品g')
insert into tb2 values('8' , '8' , N'产品h')
insert into tb2 values('9' , '9' , N'产品i')
insert into tb2 values('10' , '10' , N'产品j')
goDECLARE @fatherid VARCHAR(10) = '0';
WITH a AS (
SELECT id,
fatherid,
NAME,
ID AS ID_f,
NAME AS name_f
FROM tb1 AS t
WHERE t.fatherid = @fatherid
UNION ALL
SELECT tb1.id,
tb1.fatherid,
tb1.NAME,
a.id AS id_f,
a.name AS name_f
FROM tb1
JOIN a
ON tb1.fatherid = a.id
)SELECT a.id_f,
@fatherid AS fatherid,
a.NAME_f,
COUNT(1) AS num
FROM tb2
INNER JOIN a
ON tb2.categoryid = a.id
GROUP BY
a.id_f,
a.NAME_f
/*
id_f fatherid NAME_f num
---- ---------- ---------- -----------
1 0 大类1 3
2 0 大类2 4
3 0 大类3 3(3 個資料列受到影響)
*/
num=大类所属产品+大类子级所属产品 本身是不包括在内的,因为不是“产品”
--create table tb1(id varchar(3) , fatherid varchar(3) , name Nvarchar(10))
--insert into tb1 values('1' , '0' , N'大类1')
--insert into tb1 values('2' , '0' , N'大类2')
--insert into tb1 values('3' , '0' , N'大类3')
----insert into tb1 values('4' , '1' , N'小类1')
----insert into tb1 values('5' , '1' , N'小类2')
----insert into tb1 values('6' , '2' , N'小类3')
----insert into tb1 values('7' , '2' , N'小类4')
----insert into tb1 values('8' , '2' , N'小类5')
----insert into tb1 values('9' , '3' , N'小类6')
----insert into tb1 values('10' , '3' ,N'小类7')
----go
----fatherid=0为父级--create table tb2(id varchar(3) , categoryid varchar(3) , name Nvarchar(10))
--insert into tb2 values('1' , '1' , N'产品a')
--insert into tb2 values('2' , '2' , N'产品b')
--insert into tb2 values('3' , '3' , N'产品c')
--insert into tb2 values('4' , '4' , N'产品d')
--insert into tb2 values('5' , '5' , N'产品e')
--insert into tb2 values('6' , '6' , N'产品f')
--insert into tb2 values('7' , '7' , N'产品g')
--insert into tb2 values('8' , '8' , N'产品h')
--insert into tb2 values('9' , '9' , N'产品i')
--insert into tb2 values('10' , '10' , N'产品j')
--go--tb1.id=tb2.categoryid--怎么得到下面,得到从属于自己的产品和子级产品的个数
--id fatherid name num
--1 0 大类1 3
--2 0 大类2 4
--3 0 大类3 3
;WITH cte AS (
SELECT a.id ,a.fatherid ,a.NAME ,COUNT(b.name)num
FROM tb1 a LEFT JOIN tb2 b ON a.id=b.categoryid
GROUP BY a.id ,a.fatherid ,a.NAME )
SELECT a.id,a.fatherid,a.NAME,(SELECT SUM(num) FROM cte b WHERE b.fatherid=a.id AND b.fatherid<>0)+a.num num
FROM cte a
WHERE a.fatherid=0/*
id fatherid NAME num
---- -------- ---------- -----------
1 0 大类1 3
2 0 大类2 4
3 0 大类3 3
*/