2015-11-15 4 views
0

У меня есть таблица следующимSQL Select и Count Заявление

-------------------------------- 
ChildId | ChildName | ParentId | 
-------------------------------- 
    1 |  A  | 0  | 
-------------------------------- 
    2 |  B  | 1  | 
-------------------------------- 
    3 |  C  | 1  | 
-------------------------------- 

Я хотел бы, чтобы выбрать данные, как -

--------------------------------------- 
    Id | Name |  Childs | 
--------------------------------------- 
    1 |  A  |  2  | 
--------------------------------------- 
    2 |  B  |  0  | 
--------------------------------------- 
    3 |  C  |  0  | 
--------------------------------------- 

псевдовосточного заявление SQL должен быть как this-

SELECT ChildId AS Id, ChildName as Name, (Count (ParentId) Where ParentId=ChildId) 

Любая помощь?

+0

Что делать, если B есть ребенок? –

ответ

0

Что-то вроде этого?

SELECT ChildId AS Id, ChildName as Name, (SELECT COUNT(*) FROM TestCountOver T WHERE T.ParentID = O.ChildID) FROM TestCountOver O 

, но это даст вам все узлы плюс дети, которые не должны быть частью иерархии

Если вы хотите только узлы с детьми, то используйте КТР

;WITH CTE AS (
SELECT ChildId AS Id, ChildName as Name, (SELECT COUNT(*) FROM TestCountOver T WHERE T.ParentID = O.ChildID) Cnt FROM TestCountOver O 
) 
SELECT * 
FROM CTE 
WHERE Cnt > 0 
+0

Отвечает мне навсегда, чтобы написать ответ: P Ответ Гиорги - лучшая ставка – VenoMpie

2

Это будет делать трюк:

select t1.childid, t1.childname, count(*) as childs 
from table t1 
join table t2 on t1.childid = t2.parentid 
group by t1.childid, t1.childname 
0

Если есть только один уровень вы можете использовать подход в коде псевдо. Он должен выглядеть следующим образом:

SELECT 
    ChildId AS Id, 
    ChildName as Name, 
    (select Count(ParentId) from t t_inner Where ParentId=t_outer.ChildId) children 
from t t_outer 
-- optionally where clause to limit result to parents that have children 
where exists (select 1 from t where ParentId in (t_outer.ChildId)) 

но если может быть больше, чем один уровень можно решить с помощью рекурсивного запроса, если вы хотите, общее число детей, для родителей (в том числе внуками и т.д.).