Member 14156756 Ответов: 1

Как я могу сохранить запись в группе таблиц без использования курсора и циклов.<


WITH CTE AS
(
    SELECT FETCHNEXT.*
    , RN = ROW_NUMBER()OVER(PARTITION BY ID ORDER BY ID)
    FROM FETCHNEXT 
)
	SELECT * 
		FROM CTE
		WHERE RN = 1
	UNION ALL
	
	SELECT * 
		FROM CTE
		WHERE RN = 2
	UNION ALL
	
	SELECT * 
		FROM CTE
		WHERE RN = 3


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

WITH CTE AS
(
    SELECT FETCHNEXT.*
    , RN = ROW_NUMBER()OVER(PARTITION BY ID ORDER BY ID)
    FROM FETCHNEXT 
)
	SELECT * 
		FROM CTE
		WHERE RN = 1
	UNION ALL
	
	SELECT * 
		FROM CTE
		WHERE RN = 2
	UNION ALL
	
	SELECT * 
		FROM CTE
		WHERE RN = 3

ZurdoDev

Я не совсем понимаю, но это звучит не слишком сложно. Похоже, вы хотите сгруппировать магазины вместе по тому факту, что они разделяют товары? Итак, просто группируйтесь по магазинам.

1 Ответов

Рейтинг:
1

CHill60

Я использовал эти данные

CREATE TABLE #ITEMSOFSTORES 
(
	ITEM INT, 
	STORE INT 
) 
INSERT INTO #ITEMSOFSTORES (ITEM,STORE) VALUES (1,1),(1,3),(4,1),(4,3),(5,1),(5,3),(2,1),(2,2),(2,4),(3,1),(3,2),(3,4);
И я создал еще одну временную таблицу
CREATE TABLE #groups (ITEM int, STORE int, stores varchar(125))
Который я затем заполнил этим запросом:
INSERT INTO #groups (item, store, stores)
SELECT ITEM, STORE, STUFF
(
	(
		SELECT ',' + CAST(STORE AS VARCHAR)
		FROM #ITEMSOFSTORES B
		WHERE A.ITEM = B.ITEM
		ORDER BY STORE
		FOR XML PATH('')
	), 1, 1, ''
) AS stores
FROM #ITEMSOFSTORES A
Это, по сути, перечисляет все элементы с разделенным запятыми списком магазинов, в которых он может быть найден. Запрос
select DISTINCT ITEM, STORES from #groups
дает следующие результаты:
ITEM   STORES
1	1,3
2	1,2,4
3	1,2,4
4	1,3
5	1,3
и
select ROW_NUMBER() OVER (ORDER BY STORES), STORES from #groups GROUP BY STORES
даст каждой из этих "группировок" номер, чтобы вы могли объединить их, чтобы получить свои результаты
select DISTINCT ITEM, N from #groups A
INNER JOIN 
(select ROW_NUMBER() OVER (ORDER BY STORES) AS N, STORES from #groups GROUP BY STORES) B ON A.STORES = B.STORES


Member 14156756

OUTPUT NEEDED:- 

STOREGROUS TABLE
GroupId Strore
1       1
1       3    
2       1
2       2
2       4

ITEMGROUPS TABLE
GroupId Item
1       1
1       4    
1       5
2       3
2       2

CHill60

Я сделал всю тяжелую работу! Этот последний запрос фактически создает таблицу ITEMGROUPS. Просто сделайте что - то подобное для таблицы STOREGROUPS.