【问题标题】:Query For Hierarchy Order In SQL在 SQL 中查询层次结构顺序
【发布时间】:2016-04-26 14:31:36
【问题描述】:

我的实际表:

--------------------------------------------------
      Col1      |      Col2         |     Col3      |
--------------------------------------------------
     1                A                  1
     6                F                  2
     3                C                  4     
     2                B                  1
     5                E                  3
     4                D                  2

预期结果:

------------------
|Columns Should Be|
------------------
A     B    F    D   C   E  

我需要对这个分层逻辑进行 SQL 查询。我必须使用 col 1 和 col3 获得结果逻辑。请帮我解决这个查询。

【问题讨论】:

  • plsql 适用于 Oracle,但已标记 SQL Server。你能改正吗?
  • 我需要来自 SQL 查询。
  • 我建议您至少自己解决这个问题。你试过什么,为什么它不起作用。对于您的输入和预期输出,您向我们提供的信息非常少,甚至更少。
  • 我必须使用 Col1 和 Col3 构建 col2。我需要一个逻辑
  • @Kapil:你在 col1 和 col3 中比较了什么。如果它们相等怎么办,如果 col1 > col3 等...

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

我刚刚看了你的回复,我相信这就是你所追求的;

CREATE TABLE #TempData (Col1 int, Col2 varchar(1), Col3 int)
INSERT INTO #TempData (Col1, Col2, Col3)
VALUES
('1','A','1')
,('6','F','4')
,('6','C','2')
,('2','B','1')
,('5','E','3')
,('4','D','5')

SELECT
Col2
FROM #TempData
GROUP BY Col2
ORDER BY SUM(Col1)+SUM(Col3)

DROP TABLE #TempData

【讨论】:

  • 谢谢 但是我错误地发布了错误的问题。请立即检查我的问题并帮助我
  • 好吧,这个问题从一开始就是一团糟。我建议你看看 UNPIVOT 命令,当你自己没有(明显)尝试这样做时,不要问含糊的问题。
【解决方案2】:
declare @table table (col1 int, col2 varchar(1), col3 int)
insert into @table (col1,col3)
values
(1,  1),
(6,  4),
(3,  2),   
(2,  1),
(5,  3),
(4,  2)

/*
      Col1      |      Col2         |     Col3      |
--------------------------------------------------
     1                A                  1
     6                F                  4
     3                C                  2     
     2                B                  1
     5                E                  3
     4                D                  5
*/
select  col1,
        case 
            when col1 > col3 then char(col1 + 64)
            else char(col3 + 64)
        end as col2,
        col3
from    @table

【讨论】:

    【解决方案3】:

    在Sql server你可以试试这个,

    declare @t table (Col1 int, Col2 varchar(1), Col3 int)
    INSERT INTO @t (Col1, Col2, Col3)
    VALUES
    ('1','A','1')
    ,('6','F','2')
    ,('3','C','4')
    ,('2','B','1')
    ,('5','E','3')
    ,('4','D','2')
    declare @str as varchar(100)=''
    ;with t as(select top 1 col1,col2,col3 from @t union all select t1.col1, t1.col2,t1.col3 from @t t1,t 
    where (t1.Col1!=t.Col1 and t1.Col3=t.Col1) )
    
    select @str=@str+'  '+col2 from t
    select @str as col
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2016-10-19
      • 2019-05-02
      • 2020-04-17
      • 2015-10-15
      相关资源
      最近更新 更多