2013-10-25 2 views

ответ

1

Пожалуйста, найдите ниже запрос, как хотите. Я создал MyTest как имя таблицы, которую вам нужно заменить.

SELECT 
    Case WHEN ISNULL(SecondTable.Id,0) = 0 
     THEN FirstTable.Dept 
     ELSE '' 
    END As Department, 

    Case WHEN ISNULL(SecondTable.Id,0) = 0 
     THEN Manager.Name 
     ELSE '' 
    END As Manager, 
    FirstTable.Name FROM MyTest As FirstTable 
LEFT JOIN MyTest As SecondTable ON 
    SecondTable.ID = (SELECT Top 1 MyTest.ID 
         FROM MyTest 
         WHERE MyTest.Manager = FirstTable.Manager 
         AND MyTest.dept = FirstTable.dept 
         AND MyTest.Id < FirstTable.Id 
         ORDER BY MyTest.ID Desc) 
LEFT JOIN MyTest As Manager On Manager.Id = FirstTable.Manager WHERE FirstTable.Manager <> 0 ORDER BY FirstTable.dept, FirstTable.ID 
+0

Спасибо Snehal .... спасибо вам большое. – user1602788

0

Что вы ищете для получения иерархических данных с SQL Server 2008 можно использовать общую таблицу выражение. проверьте эту ссылку Recursive Queries Using Common Table Expressions вывод данных плоский (он будет повторять SW и Mukesh для каждой строки). Надеюсь, это поможет

0

Это невозможно в sql. Что вы можете сделать, так это получить имя депо и менеджера для каждого из них.

SELECT t1.Dept AS DEP, t2.name AS MANAGER, t1.name AS NAME 
FROM table1 t1 
INNER JOIN table1 t2 ON t1.manager = t2.id 

sqlfiddle demo

Это вернет что-то вроде:

DEP MANAGER NAME 
SW Mukesh Ram 
SW Mukesh sham 
SW Mukesh rahul 
HQ Rajat akhilesh 
HQ Rajat sachin 

Затем на вашем языке программирования выбора вы могли бы сделать это форматирование.

Смежные вопросы