【问题标题】:ReCursive/While Loop递归/While循环
【发布时间】:2013-08-12 00:41:01
【问题描述】:

我正在尝试构建一个查看包含三列的表的视图;建筑物,车道,地段。我需要能够动态循环遍历表格以在一行上显示建筑物、车道和地段。

示例:

>Building       Lane     Lot
>   1           1001    56789
>   1           1002    12489
>   1           1002    37159
>   1           1002    71648
>   3           3001    27489
>   3           3001    67154
>   3           3002    47135
>   3           3003    84271
>   3           3003    96472
>   3           3003    94276

结果

>  Building Lane    Lots
>     1     1001    56789
>     1     1002    12489, 37159, 71648
>     3     3001    27489, 67154
>     3     3002    47135
>     3     3003    84271, 96472, 94276

我尝试了递归联合,但收到一条消息,指出我已超过最大数量 100。 我也尝试了一个循环,但它一直在继续,并没有像我希望的那样连接。 到目前为止,表格中有超过 300 个地段号,一栋一车道的一栋建筑具有更多的潜力。

【问题讨论】:

  • 我不明白这个问题。也许更好地格式化样本和结果会有所帮助。
  • SQL Server 是否有相当于 MySQL 的 GROUP_CONCAT() 的功能?
  • 你可以在这个link找到一些帮助
  • 来吧,这个问题一天会被问多次。 Example.

标签: sql sql-server loops recursion while-loop


【解决方案1】:

您似乎正在寻找类似于以下脚本的内容 (see this SQL Fiddle example):

DECLARE @row TABLE (
    A VARCHAR(1),
    AA VARCHAR(1),
    B VARCHAR(4)
)

INSERT INTO @row VALUES(1,1,1001)
INSERT INTO @row VALUES(1,1,1002)
INSERT INTO @row VALUES(1,1,1003)
INSERT INTO @row VALUES(1,2,1001)
INSERT INTO @row VALUES(2,1,1001)
INSERT INTO @row VALUES(2,1,1002)
INSERT INTO @row VALUES(2,1,1003)
INSERT INTO @row VALUES(2,1,1004)
INSERT INTO @row VALUES(2,1,1005)
INSERT INTO @row VALUES(2,2,1001)
INSERT INTO @row VALUES(2,2,1002)
INSERT INTO @row VALUES(3,1,1001)

SELECT *
FROM @row

SELECT r1.A
    , r1.AA
    , STUFF((SELECT ', ' + r2.B AS [text()] 
    FROM @row r2
    WHERE r1.A = r2.A AND r1.AA = r2.AA
    ORDER BY r2.B 
    FOR XML PATH('')),1,1,'') AS "Row"
FROM @row r1
GROUP BY A, AA

所以对于您的查询,它看起来像这样:

SELECT r1.Building
    , r1.Lane
    , STUFF((SELECT ', ' + r2.Lot AS [text()] 
    FROM YourTable r2
    WHERE r1.Building = r2.Building AND r1.Lane = r2.Lane
    ORDER BY r2.Lot
    FOR XML PATH('')),1,1,'') AS "Row"
FROM YourTable r1
GROUP BY Building, Lane

【讨论】:

    猜你喜欢
    • 2016-02-27
    • 2012-08-04
    • 2021-05-03
    • 2018-08-15
    • 1970-01-01
    • 2020-09-05
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多