【问题标题】:i have problems with script. Help please我的脚本有问题。请帮忙
【发布时间】:2014-04-27 13:51:08
【问题描述】:

我写这篇文章,我有这个表结构。

CREATE TABLE #TEMP 
(
 IdNode varchar(5), 
 IdSubNode varchar(5), 
 Lvl int 
)

INSERT INTO #TEMP VALUES ('A', null,0), ('A','B',1), ('A','C',1), ('A','D',1)
INSERT INTO #TEMP VALUES ('B','B1',2), ('B','B2',2), ('B','B3',2)
INSERT INTO #TEMP VALUES ('D','D1',2), ('D','D2',2), ('D','D3',2)
INSERT INTO #TEMP VALUES ('B1','BB1',3), ('B1','BB2',3), ('B1','BB3',3)

SELECT * FROM #TEMP

拜托,我需要这样的查询:

/* -- I need this format
A / 
  / B /
      / B1 
           / BB1
           / BB2
           / BB3
      / B2 
      / B3
  / C /
  / D /
      / D1 
      / D2 
      / D3
*/

感谢您的帮助。

【问题讨论】:

  • i have problems with script. Help please 请更改您的主题行,使其更具描述性并针对您的问题。
  • 查找 CONNECT BY 或分层查询,然后尝试一下,当您再次卡住时.. 发布问题。
  • 欢迎来到 SO!根据您的问题,我只能猜测您想以某种树状分层格式打印查询结果。如果是这样,您应该确定您的应用程序使用哪种编程语言,并且您应该告诉我们到目前为止您已经尝试过什么。就目前而言,您的问题太宽泛,不够具体,您不太可能得到帮助。您可能需要阅读“帮助”页面(本网站右上角的链接)以了解如何在此处获得最佳帮助。

标签: sql sql-server loops recursion common-table-expression


【解决方案1】:

你想要这样的东西吗?

SELECT DISTINCT *
FROM
(
SELECT DISTINCT IdNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdNode)=1
UNION ALL
SELECT DISTINCT IdSubNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 1)A

LEFT JOIN
(SELECT DISTINCT IdNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdNode)=2
UNION ALL
SELECT DISTINCT IdSubNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 2)B
ON A.[1st_Level] = LEFT(B.[2nd_Level],1)

LEFT JOIN
(SELECT DISTINCT IdNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdNode)=3
UNION ALL
SELECT DISTINCT IdSubNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 3)C
ON LEFT(B.[2nd_Level],1) = LEFT(C.[3rd_Level],1)

【讨论】:

  • 谢谢。我会尝试将代码放入其中。 lvl 是动态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2011-04-29
相关资源
最近更新 更多