2013-08-10 3 views
1

Я пытаюсь создать представление, которое смотрит на таблицу с тремя столбцами; Здание, Лейн, Лот. Мне нужно иметь возможность циклически прокручивать таблицу динамически, чтобы отображать Building, Lane и Lot в одной строке.ReCursive/While Loop

Пример:

>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 

Я попытался рекурсия союза, но получил сообщение, что я exceded максимального количества 100. Я также попытался петлей, но он продолжал и я не соглашался, как я надеялся. До сих пор в таблице насчитывается более 300 номеров лотов для одного здания в одной полосе с потенциалом huders больше.

+0

Я не понять вопрос. Может быть, форматирование образца и результатов лучше поможет. – FrankPl

+0

Имеет ли SQL Server эквивалент MySQL GROUP_CONCAT()? – Izkata

+0

Вы можете найти помощь в этой [ссылке] (http://www.sqlservercentral.com/Forums/Topic1260952-338-1.aspx) – Nilesh

ответ

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