0

サンプルデータ:

このクエリを使用して、親子関係を平坦化できます。

助けて...

前もって感謝します。

4

2 に答える 2

1

次のことを試してください。

select
COALESCE(mg4.Id,   mg3.Id,   mg2.Id,   mg1.Id,   em.Id)   AS cat1ID,
COALESCE(mg4.Name, mg3.Name, mg2.Name, mg1.Name, em.Name) AS cat1Name,

CASE
  WHEN mg4.Id IS NOT NULL THEN mg3.Id
  WHEN mg3.Id IS NOT NULL THEN mg2.Id
  WHEN mg2.Id IS NOT NULL THEN mg1.Id
  WHEN mg1.Id IS NOT NULL THEN em.Id
END AS cat3ID,
CASE
  WHEN mg4.Id IS NOT NULL THEN mg3.Name
  WHEN mg3.Id IS NOT NULL THEN mg2.Name
  WHEN mg2.Id IS NOT NULL THEN mg1.Name
  WHEN mg1.Id IS NOT NULL THEN em.Name
END AS cat3Name,

CASE
  WHEN mg4.Id IS NOT NULL THEN mg2.Id
  WHEN mg3.Id IS NOT NULL THEN mg1.Id
  WHEN mg2.Id IS NOT NULL THEN em.Id
END AS cat3ID,
CASE
  WHEN mg4.Id IS NOT NULL THEN mg2.Name
  WHEN mg3.Id IS NOT NULL THEN mg1.Name
  WHEN mg2.Id IS NOT NULL THEN em.Name
END AS cat3Name,

CASE
  WHEN mg4.Id IS NOT NULL THEN mg1.Id
  WHEN mg3.Id IS NOT NULL THEN em.Id
END AS cat4ID,
CASE
  WHEN mg4.Id IS NOT NULL THEN mg1.Name
  WHEN mg3.Id IS NOT NULL THEN em.Name
END AS cat4Name,

CASE WHEN mg4.Id IS NOT NULL THEN em.Id   END AS cat5ID,
CASE WHEN mg4.Id IS NOT NULL THEN em.Name END AS cat5Name,

em.Id AS chosenCatId,

CASE WHEN  em.id > 0 THEN 1 ELSE 0 END 
+ CASE WHEN  mg1.id > 0 THEN 1 ELSE 0 END 
+ CASE WHEN  mg2.id > 0 THEN 1 ELSE 0 END 
+ CASE WHEN  mg3.id > 0 THEN 1 ELSE 0 END
+ CASE WHEN  mg4.id > 0 THEN 1 ELSE 0 END AS chosenLevel

from tempCategory em 

left join tempCategory mg1  
on mg1.Id = em.parentCategory

left join tempCategory mg2  
on mg2.Id = mg1.parentCategory

left join tempCategory mg3  
on mg3.Id = mg2.parentCategory

left join tempCategory mg4  
on mg4.Id = mg3.parentCategory

クエリは から列をプルしないため、最後の結合を省略しましたmg5

SQL Fiddle でのこのクエリ: http://sqlfiddle.com/#!3/a6f01/5

于 2012-06-29T13:40:15.143 に答える
0

純粋な T-SQL 自体は再帰クエリをサポートしていませんが、SQL Server Common Table Expression (SQL Server のみの機能) を使用できます。

SQL-Server CTE 再帰をカバーするページは次のとおりです: http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx

于 2012-06-29T15:28:50.960 に答える