根据同一个表中另一列的值创建SQL列

时间:2014-02-06 16:04:00

标签: sql

我一定不能使用正确的Google foo来找到正确的答案。

我的表格如下所示:

ID父级状态名称

1 NULL 0 Root

2 1 0 Group 1

3 6 400 WINXP32

4 2 400 WIN7

5 2 400 WIN2K8

6 1 0组2

'name'列包含组名和机器名。群组的“状态”为0。 如何创建一个SQL语句来显示(不是修改数据库)一个名为'Group'的列,这个列基于'Parent'列保存其父ID的'ID'的逻辑。

不知怎的,我可以弄清楚如何从其他表中加入数据,但我无法弄明白......

- 更新:我忘了展示我正在寻找的输出示例,在一个完美的世界中我会得到以下内容..

ID |集团|状态|名称
3 |第2组| 400 | WINXP32
4 |第1组| 400 | WIN7
5 |第1组| 400 | WIN2K8

我会(我认为)通过执行where status>从输出中过滤出组。 0

感谢大家的快速反馈!

4 个答案:

答案 0 :(得分:1)

试试这个

SELECT ID, 
       CASE WHEN STATUS = 0 THEN (SELECT Root WHERE Parent  = ID)
       END [Group]
       Status,
       Name
FROM TABLE1
WHERE STATUS <> 0

答案 1 :(得分:0)

你的意思是这样的(自我加入SQL标准)?

如果您的父ID可能缺失记录:

select t1.name,
       t2.name as "Group"
from tab t1
     left join tab t2
     on t1.parent = t2.id
where t1.status > 0;

如果始终存在父ID,则可以使用内部联接:

select t1.name,
       t2.name as "Group"
from tab t1, tab t2
where t1.parent = t2.id
  and t1.status > 0;

否则,请你解释一下你需要什么?

答案 2 :(得分:0)

我认为你的主要问题是两次使用同一个表。这是通过使用Corrado Piola解释的不同别名来实现的。

select t1.name, t2.name from mytab t1, mytab t2 where ...

现在t1和t2表现得像不同的表。

答案 3 :(得分:0)

     Select 
     m.id,g.Name,m.Status,m.Name
     from
     table1 M,
     table2 G
     where
     m.Status >0  
     and g.Status = 0
     and m.Parent = g.id