suneel kumar gupta Ответов: 1

Я хочу написать SQL-запрос, чтобы получить группу результатов.


Table
Column1	Column2
a	      1
a	      2
a	      3
a	      4
a	      5
a	      6
a	      7
a	      8
a	      9
a	      10

 Required OUT PUT: 
Column1	Column2
a	       1,2,3,4,5
a	        6,7,8,9,10


Что я уже пробовал:

Я попытался получить ниже результат с помощью sql server, но не получил исключенного результата.
Пожалуйста помочь.

1 Ответов

Рейтинг:
0

Maciej Los

Проверить это:
sql-объединить много строк в одну текстовую строку? - переполнение стека[^]
sql-несколько строк в одно значение, разделенное запятыми-переполнение стека[^]


[РЕДАКТИРОВАТЬ]
Я забыл упомянуть, что вам нужно использовать NTILE(2)[^] функция, чтобы иметь возможность разделить Column1 разделите их на 2 группы, прежде чем начать конкатенацию Column2:

SELECT *, NTILE(2) OVER( ORDER BY Column1) AS GrpNo
FROM YourTableName


Полный пример:
DECLARE @tmp TABLE (Column1 VARCHAR(5),	Column2 INT)

INSERT INTO @tmp (Column1, Column2)
VALUES('a', 1),
('a', 2),
('a', 3),
('a', 4),
('a', 5),
('a', 6),
('a', 7),
('a', 8),
('a', 9),
('a', 10)

SELECT DISTINCT t2.Column1, 
    (
        SELECT CONVERT(VARCHAR(100), t1.Column2) + ',' AS [text()]
        From (
			SELECT *, NTILE(2) OVER( ORDER BY Column1) AS GrpNo
			FROM @tmp
		) t1
        WHERE t1.Column1  = t2.Column1 AND t1.GrpNo = t2.GrpNo
        FOR XML PATH ('')
    ) AS Col2
FROM (
	SELECT *, NTILE(2) OVER( ORDER BY Column1) AS GrpNo
	FROM @tmp
	) AS t2


suneel kumar gupta

Я должен определить максимальное количество элементов в каждой группе.
Например: если нет от 1 до 25 и если максимальный элемент в каждой группе равен 10,
тогда o/p s будет

а 1,2,3..10
б 11,12, ... 20
с 21,22...25

Maciej Los

И что же?
Вы читали о функции NTILE?
Вы пробовали изменить образец в соответствии с вашими потребностями?

suneel kumar gupta

Спасибо, я все понял.

Maciej Los

Всегда пожалуйста. Пожалуйста, примите мое решение (зеленая кнопка).