由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - 问一个关于SQL的问题
相关主题
[Mysql] how to return NULL count in group by query (转载)help about SQL for ACCESS
Interesting Data Manipulation questionask for help with a simple query!!!
菜鸟问.asp 里的select语句在基于SQL sever和Access语法上的不SQL server 2000有hidden records吗?
再现急求答案,多谢。请问T-SQL中Group By之后怎么找到特定的record
今典问题: 这个Self Query咋写?SQL SERVER 面试题, find the objects
有趣的Join问题,源于SQL和SAS比较。问个SQL问题
T-SQL Update Statement QuestionSQL中怎样用定制列排序?
问个mssql 问题服了,这就是我们QA和DBA的水平
相关话题的讨论汇总
话题: group话题: tree话题: parent话题: lvl话题: level
进入Database版参与讨论
1 (共1页)
d*g
发帖数: 62
1
我有两个表Tree和Group分别定义了一个树 和一个group
Tree:
node parent_nod parent_lvl
1 1 1
2 2 2
2 1 1
3 3 2
3 1 1
4 4 3
4 2 2
4 1 1
5 5 3
5 2 2
5 1 1
6 6 3
6 3 2
6 1 1
7 7 3
7 3 2
7 1 1
8 8 4
8 4 3
8 2 2
8 1 1
Group
node group_id
8 101
5 101
6 102
7 102
现在我想找出Group中每个组中所有node的公共的level最大的parent
比如上例的结果:
Result
group_id max_lvl_parent
101 2
102
d*g
发帖数: 62
2
Tree长得象这样
1 ------- level 1
/ \
2 3 ----- level 2
/ \ / \
4 5 6 7 ---- level 3
/ \
8 9 --------------- level 4

【在 d*g 的大作中提到】
: 我有两个表Tree和Group分别定义了一个树 和一个group
: Tree:
: node parent_nod parent_lvl
: 1 1 1
: 2 2 2
: 2 1 1
: 3 3 2
: 3 1 1
: 4 4 3
: 4 2 2

j*****n
发帖数: 1781
3
somewhat interesting, let me think...
B*****g
发帖数: 34098
4
oracle using connect by + level
sql server 2008正在学习中,看看下面这个例子
CREATE TABLE dbo.Company
(CompanyID int NOT NULL PRIMARY KEY,
ParentCompanyID int NULL,
CompanyName varchar(25) NOT NULL)
INSERT dbo.Company (CompanyID, ParentCompanyID, CompanyName)
VALUES
(1, NULL, 'Mega-Corp'),
(2, 1, 'Mediamus-Corp'),
(3, 1, 'KindaBigus-Corp'),
(4, 3, 'GettinSmaller-Corp'),
(5, 4, 'Smallest-Corp'),
(6, 5, 'Puny-Corp'),
(7, 5, 'Small2-Corp')
WITH CompanyTree(ParentCompanyID, CompanyID, CompanyName, CompanyLevel)
AS

【在 j*****n 的大作中提到】
: somewhat interesting, let me think...
B*****g
发帖数: 34098
5
Let us know what is your DB.

【在 d*g 的大作中提到】
: 我有两个表Tree和Group分别定义了一个树 和一个group
: Tree:
: node parent_nod parent_lvl
: 1 1 1
: 2 2 2
: 2 1 1
: 3 3 2
: 3 1 1
: 4 4 3
: 4 2 2

j*****n
发帖数: 1781
6
Common Table Expression (CTE)
New feature since SQL Server 2005. I also thought about it. However, things
seems not as simple as it.
Still thinking...

【在 B*****g 的大作中提到】
: oracle using connect by + level
: sql server 2008正在学习中,看看下面这个例子
: CREATE TABLE dbo.Company
: (CompanyID int NOT NULL PRIMARY KEY,
: ParentCompanyID int NULL,
: CompanyName varchar(25) NOT NULL)
: INSERT dbo.Company (CompanyID, ParentCompanyID, CompanyName)
: VALUES
: (1, NULL, 'Mega-Corp'),
: (2, 1, 'Mediamus-Corp'),

d*g
发帖数: 62
7
需要写个SQL在Oracle 和 DB2下都能运行
多谢!

【在 B*****g 的大作中提到】
: Let us know what is your DB.
j*****n
发帖数: 1781
8
not sure if it is right, no testing environment.
anyone can test it?
the DISTINCT may or may not necessary.
SELECT DISTINCT A_list.group_id, max(A_list.parent) max_lvl_parent
FROM
(
SELECT G.group_id, T.parent_nod, T.parent_lvl
FROM Group G, Tree T
WHERE G.node = T.node
) A_list,
(
SELECT G.group_id, T.parent_nod, T.parent_lvl
FROM Group G, Tree T
WHERE G.node = T.node
) B_list
WHERE A_list.Group_id = B_list.Group_id
AND A_list.parent = B_list.parent
AND A_list.parent_l

【在 B*****g 的大作中提到】
: oracle using connect by + level
: sql server 2008正在学习中,看看下面这个例子
: CREATE TABLE dbo.Company
: (CompanyID int NOT NULL PRIMARY KEY,
: ParentCompanyID int NULL,
: CompanyName varchar(25) NOT NULL)
: INSERT dbo.Company (CompanyID, ParentCompanyID, CompanyName)
: VALUES
: (1, NULL, 'Mega-Corp'),
: (2, 1, 'Mediamus-Corp'),

B*****g
发帖数: 34098
9
没有loop呀。

【在 j*****n 的大作中提到】
: not sure if it is right, no testing environment.
: anyone can test it?
: the DISTINCT may or may not necessary.
: SELECT DISTINCT A_list.group_id, max(A_list.parent) max_lvl_parent
: FROM
: (
: SELECT G.group_id, T.parent_nod, T.parent_lvl
: FROM Group G, Tree T
: WHERE G.node = T.node
: ) A_list,

j*****n
发帖数: 1781
10
why need loop?

【在 B*****g 的大作中提到】
: 没有loop呀。
相关主题
有趣的Join问题,源于SQL和SAS比较。help about SQL for ACCESS
T-SQL Update Statement Questionask for help with a simple query!!!
问个mssql 问题SQL server 2000有hidden records吗?
进入Database版参与讨论
B*****g
发帖数: 34098
11
我看错题了。Tree table里面有多于的data。做下面这个, 假定最顶是level1。
Tree:
node parent_nod
1 1
2 1
3 1
4 2
5 2
6 3
7 3
8 4

【在 j*****n 的大作中提到】
: why need loop?
B*****g
发帖数: 34098
12
Your code seems not work.
Finally got time to do it, it is harder than I expected. My code is still
need to be reviewed.
select A.group_id, A.parent_nod AS "max_lvl_parent"
from (
SELECT G.group_id, T.parent_nod,T.parent_lvl,
ROW_NUMBER() over (partition by G.group_id order by T.parent_lvl desc) Lvl_
Rank
FROM [Group] G, Tree T
WHERE G.node = T.node
group by G.group_id, T.parent_nod, T.parent_lvl
having not exists (select G2.node
from [Group] G2
where G2.group_id = G.group_id


【在 j*****n 的大作中提到】
: not sure if it is right, no testing environment.
: anyone can test it?
: the DISTINCT may or may not necessary.
: SELECT DISTINCT A_list.group_id, max(A_list.parent) max_lvl_parent
: FROM
: (
: SELECT G.group_id, T.parent_nod, T.parent_lvl
: FROM Group G, Tree T
: WHERE G.node = T.node
: ) A_list,

j*****n
发帖数: 1781
13
哦,看来我得重新装个sql server 了。不然连测试的环境都没。
auto format?
你指的是像在.net 里面能够自动转换大小写和调整位置吧?
SSMS 没见着有。

【在 B*****g 的大作中提到】
: Your code seems not work.
: Finally got time to do it, it is harder than I expected. My code is still
: need to be reviewed.
: select A.group_id, A.parent_nod AS "max_lvl_parent"
: from (
: SELECT G.group_id, T.parent_nod,T.parent_lvl,
: ROW_NUMBER() over (partition by G.group_id order by T.parent_lvl desc) Lvl_
: Rank
: FROM [Group] G, Tree T
: WHERE G.node = T.node

B*****g
发帖数: 34098
14
NND, cheap M$

【在 j*****n 的大作中提到】
: 哦,看来我得重新装个sql server 了。不然连测试的环境都没。
: auto format?
: 你指的是像在.net 里面能够自动转换大小写和调整位置吧?
: SSMS 没见着有。

j*****n
发帖数: 1781
15
嗯,我的code 的确不work.
整了半天才装了个2000。不用05的原因是想看看能不能用standard sql 写。

【在 B*****g 的大作中提到】
: Your code seems not work.
: Finally got time to do it, it is harder than I expected. My code is still
: need to be reviewed.
: select A.group_id, A.parent_nod AS "max_lvl_parent"
: from (
: SELECT G.group_id, T.parent_nod,T.parent_lvl,
: ROW_NUMBER() over (partition by G.group_id order by T.parent_lvl desc) Lvl_
: Rank
: FROM [Group] G, Tree T
: WHERE G.node = T.node

j*****n
发帖数: 1781
16
嗯,你的在05下面 work.

【在 B*****g 的大作中提到】
: Your code seems not work.
: Finally got time to do it, it is harder than I expected. My code is still
: need to be reviewed.
: select A.group_id, A.parent_nod AS "max_lvl_parent"
: from (
: SELECT G.group_id, T.parent_nod,T.parent_lvl,
: ROW_NUMBER() over (partition by G.group_id order by T.parent_lvl desc) Lvl_
: Rank
: FROM [Group] G, Tree T
: WHERE G.node = T.node

d*****c
发帖数: 15
17
记得在oralce PL/SQL 里面看到一个关于 Hierarchical Data Retrieval.跟你的问题
很像,你可以试试。如果你不是用oracle,就不知道了
(Oracle Database 10g PL/SQL Progamming的132页里的例子改造一下应该可以用)
语法大概是:
SELECT max(LEVEL)
INTO 。。。
FROM Tree
START WITH 。。。
CONNECT BY PRIOR parent_node = node

【在 d*g 的大作中提到】
: 我有两个表Tree和Group分别定义了一个树 和一个group
: Tree:
: node parent_nod parent_lvl
: 1 1 1
: 2 2 2
: 2 1 1
: 3 3 2
: 3 1 1
: 4 4 3
: 4 2 2

B*****g
发帖数: 34098
18
lz又没有feedback。

【在 j*****n 的大作中提到】
: 嗯,你的在05下面 work.
j*****n
发帖数: 1781
19
放入黑名单。。。咱们辛苦回帖为哪般?

【在 B*****g 的大作中提到】
: lz又没有feedback。
B*****g
发帖数: 34098
20
牛年不回生面空问题了。

【在 j*****n 的大作中提到】
: 放入黑名单。。。咱们辛苦回帖为哪般?
相关主题
请问T-SQL中Group By之后怎么找到特定的recordSQL中怎样用定制列排序?
SQL SERVER 面试题, find the objects服了,这就是我们QA和DBA的水平
问个SQL问题问个SQL问题- partial outer join
进入Database版参与讨论
d*****c
发帖数: 15
21
小心翼翼来拍马:)
“生面空”是谁?拖出来50大板子

【在 B*****g 的大作中提到】
: 牛年不回生面空问题了。
U****D
发帖数: 113
22
生面孔。

【在 d*****c 的大作中提到】
: 小心翼翼来拍马:)
: “生面空”是谁?拖出来50大板子

d*****c
发帖数: 15
23
恩,恩,谢谢解惑。
你是生面孔不?如果是,请多回Beijing等大侠的贴,如果不是,请多回我们生面孔的
贴。
多谢多谢罗

【在 U****D 的大作中提到】
: 生面孔。
1 (共1页)
进入Database版参与讨论
相关主题
服了,这就是我们QA和DBA的水平今典问题: 这个Self Query咋写?
问个SQL问题- partial outer join有趣的Join问题,源于SQL和SAS比较。
SQL find distinct values in large tableT-SQL Update Statement Question
SQL run a stored procedure by fetching from a cursor row by row问个mssql 问题
[Mysql] how to return NULL count in group by query (转载)help about SQL for ACCESS
Interesting Data Manipulation questionask for help with a simple query!!!
菜鸟问.asp 里的select语句在基于SQL sever和Access语法上的不SQL server 2000有hidden records吗?
再现急求答案,多谢。请问T-SQL中Group By之后怎么找到特定的record
相关话题的讨论汇总
话题: group话题: tree话题: parent话题: lvl话题: level