Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Необходимо найти подходящие группы

Есть данные p_ord -id объекта q_ord -его кол-во (в данном случае не принципиально)
declare @ord_p table (p_ord int, q_ord int)
insert into @ord_p
select 63009,60 union all --test Group 1
select 67617,5  union all --test Group 1
select 63015,60 union all --test Group 1
select 65446,60 union all --test Group 2
select 67202,100 union all --test Group 2

В исходных данных могут быть от 1ой до ... N групп
Принадлежность данных к группе изначально не известна как и количество групп.

Необходимо найти подходящую группу(ы)
Данные для поиска так же не предсказуемы (может не быть совпадений или только часть данных принадлежит группе, так же возможно более одного совпадения)
В таблице ниже мы имеем совпадение (Group1 это gr 1 или 7), (Group2 это gr 10)

Собственно не могу придумать как осуществить перебор вариантов О_о так как в начальном условии я не знаю принадлежность к группе и сколько их дано.

как откинуть "очевидно" неверные группы понятно, группы содержащие id объекта которого нет в начальных данных и группы с заведомо не корректным кол-вом. отсеял.
А вот как быть дальше ... ничего хорошего не могу придумать.

declare @mix table (P_id int,gr int,qty int)
select 63009,1,60 union all
select 67617,1,5 union all
select 63015,1,60 union all
select 67617,2,5 union all
select 62999,2,120 union all
select 63015,2,60 union all
select 67617,3,5 union all
select 63009,3,60 union all
select 63015,3,72 union all
select 67617,4,5 union all
select 63009,4,60 union all
select 63015,4,60 union all
select 67617,5,6 union all
select 63009,5,60 union all
select 63015,5,60 union all
select 67617,6,5 union all
select 63009,6,60 union all
select 63015,6,60 union all
select 62999,6,120 union all
select 67617,7,5 union all
select 63009,7,60 union all
select 67617,8,5 union all
select 67617,9,10 union all
select 63009,9,120 union all
select 63015,9,120 union all
select 67617,10,5 union all
select 65446,10,60 union all
select 67202,10,100 union all
select 65446,11,60 union all
select 67202,11,100 union all
select 63015,12,60 union all
select 65446,12,60 union all
select 67202,12,100 union all
select 65446,13,60 union all
select 67202,13,100 union all
select 63009,14,60 union all
select 65446,14,60 union all
select 67202,14,100 union all
7 фев 14, 15:34    [15535291]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Прочитал, но так и не понял, по какому признаку Вам нужно выделить группы? В группе должно быть 3 разных p_ord? Или как-то иначе?
7 фев 14, 15:41    [15535337]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Mashtar
Прочитал, но так и не понял, по какому признаку Вам нужно выделить группы? В группе должно быть 3 разных p_ord? Или как-то иначе?
Ээээ, дарагой!
Ясно же сказано:
zero_air
Принадлежность данных к группе изначально не известна как и количество групп


Не понимаю, почему бы с самого начала не договориться с самим собой,
что группа - одна, и все данные ей принадлежат?!
Ибо, судя по чудесной постановке задачи, Вам совершенно всё равно, что к чему относится.
7 фев 14, 15:46    [15535375]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
iap,
действительно чего это я.
zero_air, группы от 0 до 100 проставляйте:
SELECT ROUND(RAND()*100,0)
7 фев 14, 15:53    [15535425]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Если по простому

на входе

Товар и кол-во - (как написал в примере физически 2 коробки) только я об этом не знаю

есть сток на котором куча коробок
вот нужно найти эти самые две коробки, условие = совпадение количества и товара. (причем совпадение может быть частичное, на стоке 1 коробка к примеру , или 2 одинаковых)
7 фев 14, 15:56    [15535461]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
Эта задачка решается в 2 этапа, первым из которых является понимание условия.
7 фев 14, 15:57    [15535470]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Давайте еще проще напишу

Вся сложность в том что на входе у меня просто список
Товар количество
Товар1 10шт
Товар2 11шт
Товар3 13шт
Товар4 16шт

на стоке

Коробка1
Товар1 10шт
Товар4 16шт

Коробка2
Товар2 11шт
Товар3 13шь

Коробка3
Товар1 10шт
Товар4 20шт
...
...
КоробкаN
Товар1 12шт
Товар3 33шт


необходимо перебрать весь сток и найти что первичный список это Коробка1 и коробка2
7 фев 14, 16:15    [15535633]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Glory
Member

Откуда:
Сообщений: 104751
zero_air
необходимо перебрать весь сток и найти что первичный список это Коробка1 и коробка2

Т.е. сравнить заданный кортеж с кортежами в таблице ? на полное или частичное совпадение ?
7 фев 14, 16:19    [15535658]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Полное совпадение это будет частный случай
когда данные на входе
Товар1 10шт
Товар2 20шт
Товар3 30шт
будет совпадать с содержимым некого короба на стоке.
Если бы так было всегда :( было бы все просто

А тут получается что входящие данные это от 1 до N коробов
и необходимо найти 1 или N коробов полностью соответствующих входящему списку.
7 фев 14, 16:24    [15535695]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
zero_air
Давайте еще проще напишу

Вся сложность в том что на входе у меня просто список
Товар количество
Товар1 10шт
Товар2 11шт
Товар3 13шт
Товар4 16шт

на стоке

Коробка1
Товар1 10шт
Товар4 16шт

Коробка2
Товар2 11шт
Товар3 13шь

Коробка3
Товар1 10шт
Товар4 20шт
...
...
КоробкаN
Товар1 12шт
Товар3 33шт


необходимо перебрать весь сток и найти что первичный список это Коробка1 и коробка2


Почему именно получилось, что список это Коробка1 и Коробка2, а не Коробка3 и Коробка2?
7 фев 14, 16:37    [15535796]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Так как в коробке3 ,Товар4 20шт , а на входе Товар4 16шт
7 фев 14, 16:39    [15535807]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Glory
Member

Откуда:
Сообщений: 104751
zero_air
Так как в коробке3 ,Товар4 20шт , а на входе Товар4 16шт

А если бы не было Коробки, где Товар4 ровно 16шт ?
7 фев 14, 16:41    [15535819]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Тогда бы вернулся только один номер коробки, а часть списка осталась без номера. (это вполне возможный вариант)
7 фев 14, 16:44    [15535845]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
zero_air,
может так?
IF OBJECT_ID('tempdb..#List')IS NOT NULL DROP TABLE #List
	CREATE TABLE #List ([Name] VARCHAR(25), Quantity INT)
	
INSERT INTO #List (Name, Quantity)
VALUES	('goods1', 10), ('goods2', 11), ('goods3', 13), ('goods4', 16)

IF OBJECT_ID('tempdb..#Boxes')IS NOT NULL DROP TABLE #Boxes
	CREATE TABLE #Boxes (BoxNum INT, [Name] VARCHAR(25), Quantity INT, Flag INT DEFAULT 0)
	
INSERT INTO #Boxes (BoxNum, Name, Quantity)
VALUES	(1, 'goods1', 10), (1, 'goods4', 16), (2, 'goods2', 11), (2, 'goods3', 13), (3, 'goods1', 10), (3, 'goods4', 20), (4, 'goods1', 12), (4, 'goods3', 33)

DECLARE @BoxNum INT
	,@Name VARCHAR(255)
	,@Quantity INT

DECLARE BoxCur  CURSOR FAST_FORWARD READ_ONLY FOR
SELECT BoxNum, Name, Quantity
FROM #Boxes b

OPEN BoxCur
FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity

WHILE @@FETCH_STATUS = 0
BEGIN

IF EXISTS (SELECT * FROM #List l WHERE Name = @Name AND Quantity = @Quantity)
BEGIN
	UPDATE #Boxes
	SET Flag += 1
	WHERE BoxNum = @BoxNum
END
	FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity
END

CLOSE BoxCur
DEALLOCATE BoxCur

DELETE FROM #Boxes
WHERE Flag != 2

SELECT BoxNum
FROM #Boxes
GROUP BY BoxNum
7 фев 14, 16:47    [15535866]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Glory
Member

Откуда:
Сообщений: 104751
zero_air
Тогда бы вернулся только один номер коробки, а часть списка осталась без номера. (это вполне возможный вариант)

Как я понял
Из входного набора из N товаров
Товар1 10шт
Товар2 11шт
Товар3 13шт
Товар4 16шт

нужно составить все комбинации от 1 до N и для каждой комбинации найти точно совпадающую с ней Коробку
Т.е.
Товар1 10шт

Товар1 10шт+Товар2 11шт
Товар1 10шт+Товар3 13шт
Товар1 10шт+Товар4 16шт
..
Товар1 10шт + Товар2 11шт+ Товар3 13шт
...
Товар1 10шт + Товар2 11шт+ Товар3 13шт+Товар4 16шт
...
Товар2 11шт
...
Товар3 13шт
...
Товар4 16шт
7 фев 14, 16:50    [15535892]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
Mashtar
zero_air,
может так?
IF OBJECT_ID('tempdb..#List')IS NOT NULL DROP TABLE #List
	CREATE TABLE #List ([Name] VARCHAR(25), Quantity INT)
	
INSERT INTO #List (Name, Quantity)
VALUES	('goods1', 10), ('goods2', 11), ('goods3', 13), ('goods4', 16)

IF OBJECT_ID('tempdb..#Boxes')IS NOT NULL DROP TABLE #Boxes
	CREATE TABLE #Boxes (BoxNum INT, [Name] VARCHAR(25), Quantity INT, Flag INT DEFAULT 0)
	
INSERT INTO #Boxes (BoxNum, Name, Quantity)
VALUES	(1, 'goods1', 10), (1, 'goods4', 16), (2, 'goods2', 11), (2, 'goods3', 13), (3, 'goods1', 10), (3, 'goods4', 20), (4, 'goods1', 12), (4, 'goods3', 33)

DECLARE @BoxNum INT
	,@Name VARCHAR(255)
	,@Quantity INT

DECLARE BoxCur  CURSOR FAST_FORWARD READ_ONLY FOR
SELECT BoxNum, Name, Quantity
FROM #Boxes b

OPEN BoxCur
FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity

WHILE @@FETCH_STATUS = 0
BEGIN

IF EXISTS (SELECT * FROM #List l WHERE Name = @Name AND Quantity = @Quantity)
BEGIN
	UPDATE #Boxes
	SET Flag += 1
	WHERE BoxNum = @BoxNum
END
	FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity
END

CLOSE BoxCur
DEALLOCATE BoxCur

DELETE FROM #Boxes
WHERE Flag != 2

SELECT BoxNum
FROM #Boxes
GROUP BY BoxNum

Чтобы не привязываться к числу 2:
DELETE FROM #Boxes
FROM
	(
		SELECT BoxNum, SS = COUNT(*)
		FROM #Boxes b
		GROUP BY BoxNum
	)tt
WHERE SS != #Boxes.Flag
7 фев 14, 17:07    [15536015]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Mashtar,

К сожалению такой вариант только для идеального частного случая (с данными из первого поста запрос вернул 6 номеров) среди которых нет одного нужного
А если так
DELETE FROM #Boxes
FROM
	(
		SELECT BoxNum, SS = COUNT(*)
		FROM #Boxes b
		GROUP BY BoxNum
	)tt
WHERE SS != #Boxes.Flag


то результат 0
7 фев 14, 17:18    [15536084]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
zero_air,
покажите весь скрипт, который вернул 0
7 фев 14, 17:19    [15536086]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Mashtar,
IF OBJECT_ID('tempdb..#List')IS NOT NULL DROP TABLE #List
	CREATE TABLE #List ([Name] VARCHAR(25), Quantity INT)
	
INSERT INTO #List  (Name, Quantity)
VALUES	('63009', 60), ('67617', 5), ('63015', 60), ('65446', 60) ,('67202',100)


IF OBJECT_ID('tempdb..#Boxes')IS NOT NULL DROP TABLE #Boxes
	CREATE TABLE #Boxes (BoxNum VARCHAR(25), [Name] VARCHAR(25), Quantity INT, Flag INT DEFAULT 0)
	
INSERT INTO #Boxes (BoxNum, Name, Quantity)
VALUES
('30000777777','63009',60),
('30000777777','67617',5),
('30000777777','63015',60),
('30000888888','67617',5),
('30000888888','62999',120),
('30000888888','63015',60),
('30000999999','67617',5),
('30000999999','63009',60),
('30000999999','63015',72),
('30000044444','67617',5),
('30000044444','63009',60),
('30000044444','63015',60),
('30000555555','67617',6),
('30000555555','63009',60),
('30000555555','63015',60),
('30000666666','67617',5),
('30000666666','63009',60),
('30000666666','63015',60),
('30000666666','62999',120),
('30000222222','67617',5),
('30000222222','63009',60),
('30000111111','67617',5),
('30000333333','67617',10),
('30000333333','63009',120),
('30000333333','63015',120),
('30011111111','67617',5),
('30011111111','65446',60),
('30011111111','67202',100),
('30022222222','65446',60),
('30022222222','67202',100),
('30033333333','63015',60),
('30033333333','65446',60),
('30033333333','67202',100),
('30044444444','65446',60),
('30044444444','67202',100),
('30055555555','63009',60),
('30055555555','65446',60),
('30055555555','67202',100)


DECLARE @BoxNum VARCHAR(25)
	,@Name VARCHAR(255)
	,@Quantity INT

DECLARE BoxCur  CURSOR FAST_FORWARD READ_ONLY FOR
SELECT BoxNum, Name, Quantity
FROM #Boxes b

OPEN BoxCur
FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity

WHILE @@FETCH_STATUS = 0
BEGIN

IF EXISTS (SELECT * FROM #List l WHERE Name = @Name AND Quantity = @Quantity)
BEGIN
	UPDATE #Boxes
	SET Flag += 1
	WHERE BoxNum = @BoxNum
END
	FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity
END

CLOSE BoxCur
DEALLOCATE BoxCur

--DELETE FROM #Boxes
--WHERE Flag !=2


DELETE FROM #Boxes
FROM
	(
		SELECT BoxNum, SS = COUNT(*)
		FROM #Boxes b
		GROUP BY BoxNum
	)tt
WHERE SS != #Boxes.Flag


SELECT BoxNum
FROM #Boxes
GROUP BY BoxNum
7 фев 14, 17:30    [15536175]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Mashtar
Member

Откуда:
Сообщений: 40
zero_air, конечно, я ошибся. Извиняюсь. Вот так пробуйте:
IF OBJECT_ID('tempdb..#List')IS NOT NULL DROP TABLE #List
	CREATE TABLE #List ([Name] VARCHAR(25), Quantity INT)
	
INSERT INTO #List  (Name, Quantity)
VALUES	('63009', 60), ('67617', 5), ('63015', 60), ('65446', 60) ,('67202',100)

IF OBJECT_ID('tempdb..#Boxes')IS NOT NULL DROP TABLE #Boxes
	CREATE TABLE #Boxes (BoxNum VARCHAR(25), [Name] VARCHAR(25), Quantity INT, Flag INT DEFAULT 0)
	
INSERT INTO #Boxes (BoxNum, Name, Quantity)
VALUES
('30000777777','63009',60),
('30000777777','67617',5),
('30000777777','63015',60),
('30000888888','67617',5),
('30000888888','62999',120),
('30000888888','63015',60),
('30000999999','67617',5),
('30000999999','63009',60),
('30000999999','63015',72),
('30000044444','67617',5),
('30000044444','63009',60),
('30000044444','63015',60),
('30000555555','67617',6),
('30000555555','63009',60),
('30000555555','63015',60),
('30000666666','67617',5),
('30000666666','63009',60),
('30000666666','63015',60),
('30000666666','62999',120),
('30000222222','67617',5),
('30000222222','63009',60),
('30000111111','67617',5),
('30000333333','67617',10),
('30000333333','63009',120),
('30000333333','63015',120),
('30011111111','67617',5),
('30011111111','65446',60),
('30011111111','67202',100),
('30022222222','65446',60),
('30022222222','67202',100),
('30033333333','63015',60),
('30033333333','65446',60),
('30033333333','67202',100),
('30044444444','65446',60),
('30044444444','67202',100),
('30055555555','63009',60),
('30055555555','65446',60),
('30055555555','67202',100)


DECLARE @BoxNum VARCHAR(25)
	,@Name VARCHAR(255)
	,@Quantity INT

DECLARE BoxCur  CURSOR FAST_FORWARD READ_ONLY FOR
SELECT BoxNum, Name, Quantity
FROM #Boxes b

OPEN BoxCur
FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity

WHILE @@FETCH_STATUS = 0
BEGIN

IF EXISTS (SELECT * FROM #List l WHERE Name = @Name AND Quantity = @Quantity)
BEGIN
	UPDATE #Boxes
	SET Flag += 1
	WHERE BoxNum = @BoxNum
END
	FETCH NEXT FROM BoxCur INTO @BoxNum, @Name, @Quantity
END

CLOSE BoxCur
DEALLOCATE BoxCur

DELETE FROM #Boxes
FROM #Boxes b
	JOIN 
	(
		SELECT BoxNum, SS = COUNT(*)
		FROM #Boxes b
		GROUP BY BoxNum
	)tt ON b.BoxNum = tt.BoxNum
WHERE SS != b.Flag


SELECT BoxNum
FROM #Boxes
GROUP BY BoxNum
7 фев 14, 17:39    [15536233]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
+ Может это нужно?
declare @List table ([Name] VARCHAR(25), Quantity INT);
	
INSERT INTO @List  (Name, Quantity)
VALUES	('63009', 60), ('67617', 5), ('63015', 60), ('65446', 60) ,('67202',100);


declare @Boxes table (BoxNum VARCHAR(25), [Name] VARCHAR(25), Quantity INT, Flag INT DEFAULT 0);
	
INSERT INTO @Boxes (BoxNum, Name, Quantity)
VALUES
('30000777777','63009',60),
('30000777777','67617',5),
('30000777777','63015',60),
('30000888888','67617',5),
('30000888888','62999',120),
('30000888888','63015',60),
('30000999999','67617',5),
('30000999999','63009',60),
('30000999999','63015',72),
('30000044444','67617',5),
('30000044444','63009',60),
('30000044444','63015',60),
('30000555555','67617',6),
('30000555555','63009',60),
('30000555555','63015',60),
('30000666666','67617',5),
('30000666666','63009',60),
('30000666666','63015',60),
('30000666666','62999',120),
('30000222222','67617',5),
('30000222222','63009',60),
('30000111111','67617',5),
('30000333333','67617',10),
('30000333333','63009',120),
('30000333333','63015',120),
('30011111111','67617',5),
('30011111111','65446',60),
('30011111111','67202',100),
('30022222222','65446',60),
('30022222222','67202',100),
('30033333333','63015',60),
('30033333333','65446',60),
('30033333333','67202',100),
('30044444444','65446',60),
('30044444444','67202',100),
('30055555555','63009',60),
('30055555555','65446',60),
('30055555555','67202',100);

select
 b.BoxNum
from
 @Boxes b left join
 @List l on l.Name = b.Name and l.Quantity = b.Quantity
group by
  b.BoxNum
having
 count(l.Quantity) = count(*);
7 фев 14, 17:44    [15536259]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Mashtar,

Да, я чуть по другому (суть та же)
Перед тем как написать сюда получил тот же результат
это список коробок (что возвращает и ваш запрос и мой старый)
тут мы имеем перечень возможных совпадений , осталось из них найти сто процентные.

30000044444
30000111111
30000222222
30000777777
30011111111
30022222222
30033333333
30044444444
30055555555
7 фев 14, 17:46    [15536271]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
zero_air
Member

Откуда:
Сообщений: 53
Грубо говоря почему получаем 9 номеров
так как в исходных данных у нас есть множественные совпадения
дано:
select 63009,60
select 67617,5
select 63015,60
select 65446,60
select 67202,100

Результаты
30000044444 - нам подходит (содержит первые 3 позиции)
30000111111 - тоже подходит (содержит позицию 2)
30000222222 - тоже подходит(содержит первые 2 позиции)
и так далее
Осталось найти такую комбинацию которая "покрывала" все входящие данные
для эти данных это будет пара
30000044444
30044444444
или же
30044444444
30000777777
7 фев 14, 17:59    [15536337]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
Glory
Member

Откуда:
Сообщений: 104751
zero_air
Осталось найти такую комбинацию которая "покрывала" все входящие данные
для эти данных это будет пара

Наверное это та комбинация, в которой число записей больше-равно числу записей во входных данных?
7 фев 14, 18:06    [15536374]     Ответить | Цитировать Сообщить модератору
 Re: Подкиньте идею :(  [new]
invm
Member

Откуда: Москва
Сообщений: 9833
with x as
(
 select
  b.BoxNum
 from
  @Boxes b left join
  @List l on l.Name = b.Name and l.Quantity = b.Quantity
 group by
  b.BoxNum
 having
  count(l.Quantity) = count(*)
),
y as
(
 select
  b.*,
  row_number() over (partition by l.Name, l.Quantity order by b.BoxNum) as rn
 from
  x join
  @Boxes b on b.BoxNum = x.BoxNum join
  @List l on l.Name = b.Name and l.Quantity = b.Quantity
),
z as
(
 select
  *, count(*) over (partition by rn) as c
 from
  y
)
select distinct
 rn, BoxNum
from
 z
where
 c = (select count(*) from @List)
order by
 rn;
7 фев 14, 18:53    [15536547]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить