基于同一表中另一列的值创建SQL列

基于同一表中另一列的值创建SQL列,sql,Sql,我一定不是在使用正确的GoogleFoo来找到正确的答案 我有一张如下所示的表: ID父状态名称 1空0根2 1 0组1 36400 WINXP32 42400 WIN7 52400 WIN2K8 610第2组 “名称”列包含组名和计算机名。组的“状态”为0。 如何创建一条SQL语句,根据“Parent”列保存其父列的“ID”的逻辑,显示而不是修改数据库中名为“Group”的列 不知何故,我可以想出如何连接其他表中的数据,但我不能想出这个 -更新:我忘了展示一个我正在寻找的输出的例子,在一个完美

我一定不是在使用正确的GoogleFoo来找到正确的答案

我有一张如下所示的表:

ID父状态名称

1空0根

2 1 0组1

36400 WINXP32

42400 WIN7

52400 WIN2K8

610第2组

“名称”列包含组名和计算机名。组的“状态”为0。 如何创建一条SQL语句,根据“Parent”列保存其父列的“ID”的逻辑,显示而不是修改数据库中名为“Group”的列

不知何故,我可以想出如何连接其他表中的数据,但我不能想出这个

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

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

我认为通过执行where status>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;
否则,你能解释一下你需要什么吗?

试试看

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

我认为你的主要问题是使用同一张桌子两次。这是通过使用不同的别名实现的,如Corrado Piola解释的

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

现在t1和t2就像是不同的表。

您能给我们展示一下您的示例表所需的输出吗?请展示您期望的示例输出以及这是什么数据库平台?我不确定您想要实现什么。考虑更新你的问题来显示“群体”的价值。我还怀疑您想在select语句中使用AS。从状态为0的tablename中选择名称作为组,从状态为0的tablename中选择父id,诸如此类??Corrado Piola代表胜利!!这两种说法完全符合我的需要。我决定使用两种方法中的第一种来解释空的父ID记录,其中有一些记录。谢谢这个答案被标记为低质量。如果它回答了这个问题,考虑添加一点文本来解释它是如何工作的。
     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