0

自己結合を使用してSQLSERVERデータベースからデータを取得し、GridViewにデータを表示しています。

DepartmentMstテーブルのデータ:

DepartmentID      DepartmentName       IsActive DepartmentParentID
3                    Admin Panel       1              0
4                    Human Resource    1              0
5               Information Technology 1              0
6                     Operational      1              0
21                    TestDepartment   1              3
22                       Logistics     1              3

上記のデータから、AdminPanel部門には、メイン部門、つまりAdminPanelに属するDepartmentParentID=3の両方のSubDepartmentTestDepartmentとLogisticsがあることがわかります。

次に、DepartmentNameとそのSubDepartmentsを表示するグリッドビューでデータを表示します。

私の質問:

SELECT  dpt1.DepartmentID as DepartmentID
         ,dpt1.DepartmentName as DepartmentName
        ,dpt1.DepartmentParentID as ParentDepartmentID
        ,dpt2.DepartmentName as ChildDepartment
        ,dpt1.IsActive
  FROM DepartmentMst dpt1,DepartmentMst dpt2
  where (dpt1.DepartmentID=dpt2.DepartmentParentID) and dpt2.IsActive=1
  order by DepartmentID

O / P:

DepartmentID    DepartmentName  ParentDepartmentID  ChildDepartment  IsActive
3                   Admin Panel    0                   TestDepartment    1
3                   Admin Panel    0                     Logistics      1

しかし、SubDepartmentNameを持つすべてのDepartmentNameが必要です。いずれかの部門に親がない場合、つまりDepartmentParentID = 0の場合は、MainDepartmentとして表示する必要があります。それ以外の場合は、親部門名として表示する必要があります。

例えば:

DepartmentID    DepartmentName  IsActive    DepartmentParentID  ParentDeptName
3                   Admin Panel     1             0                MainDept
4                 Human Resource    1             0                MainDept
5          Information Technology   1             0                MainDept
6                     Operational   1             0                MainDept
21                 TestDepartment   1             3              AdminPanel
22                  Logistics       1             3              AdminPanel

上記を出す方法は?感謝します!

4

1 に答える 1

1

左結合を使用します。

SELECT
    dpt1.DepartmentID as DepartmentID
    ,dpt1.DepartmentName as DepartmentName
    ,dpt2.DepartmentParentID as ParentDepartmentID
    ,ISNULL(dpt2.DepartmentName, 'MainDept') as ParentDepartment
    ,dpt1.IsActive
FROM DepartmentMst dpt1
    LEFT JOIN DepartmentMst dpt2
        ON (dpt2.DepartmentID = dpt1.DepartmentParentID) and dpt2.IsActive=1
ORDER BY DepartmentID

結合条件が一致しない場合は、からのすべての列dpt2が戻ってくるNULLので、それをテストできます。

編集:正しくないように思われたため、クエリの列を修正しようとしました。dpt1は「現在の」テーブルでdpt2あり、親が存在する場所です(存在する場合)

于 2012-12-13T12:44:12.803 に答える