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

Откуда:
Сообщений: 48
Дорогие товарищи

Как мне убрать из полученной комбинации 3 излишних комбинации



--Prepare  data
DECLARE	@Sample TABLE
	(
		val1 VARCHAR(20),
		val2 VARCHAR(20)
	)

-------------------

-- Populate  data
INSERT	@Sample
SELECT	'A', 'A' UNION ALL
SELECT	'B', 'B' UNION ALL
SELECT	'C', 'C' 
	 

-----------------------------------------

-- Display "combined" data
SELECT	DISTINCT	 t1.val1,
		t2.val2
FROM		(
			SELECT	val1,
				ROW_NUMBER() OVER (ORDER BY NEWID()) AS recID 
			FROM	@Sample
		) AS t1
CROSS APPLY  	(
			SELECT	val2,
				ROW_NUMBER() OVER (ORDER BY NEWID()) AS recID 
			FROM	@Sample
		) AS t2 
		ORDER BY    t1.val1  , t2.val2



Resulted string
val1 val2 строка таблицы
A A 1
A B 2
A C 3
B A 4
B B 5
B C 6
C A 7
C B 8
C C 9



строка таблицы 2= строка таблицы 4 (А B и B А идентичны)
строка таблицы 6= строка таблицы 8 (BC = CB)
строка таблицы 3= строка таблицы 7 (AC=CA)
23 июн 11, 16:41    [10863550]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
BrykAlien
Member [заблокирован]

Откуда: Волгодонск
Сообщений: 1344
alwil,

Может, добавить условие?
WHERE (t1.val1 + t2.val2) <> (t2.val2 + t1.val1)
23 июн 11, 16:46    [10863602]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
BrykAlien
Member [заблокирован]

Откуда: Волгодонск
Сообщений: 1344
BrykAlien,

Не правильно я написал, простите...
23 июн 11, 16:48    [10863622]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
_ч_
Member

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

вот недавно точь-в-точь такой же вопрос задавали
https://www.sql.ru/forum/actualthread.aspx?tid=860573
23 июн 11, 16:51    [10863661]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
alwil
Member

Откуда:
Сообщений: 48
REGARDS _ч_,


-- Prepare  data
DECLARE	@Sample TABLE
	(
		val1 VARCHAR(20),
		val2 VARCHAR(20)
	)

-------------------
-- Populate  data
INSERT	@Sample
SELECT	'A', 'A' UNION ALL
SELECT	'B', 'B' UNION ALL
SELECT	'C', 'C' 

-----------------------------------------
 DECLARE @t TABLE(A_ID VARCHAR(1000),O_ID VARCHAR(1000));
					   
INSERT @t(A_ID,O_ID)
-- Display "combined" data
SELECT	DISTINCT	 t1.val1,
		t2.val2
FROM		(
			SELECT	val1,
				ROW_NUMBER() OVER (ORDER BY NEWID()) AS recID 
			FROM	@Sample
		) AS t1
CROSS APPLY  	(
			SELECT	val2,
				ROW_NUMBER() OVER (ORDER BY NEWID()) AS recID 
			FROM	@Sample
		) AS t2 
		ORDER BY    t1.val1  , t2.val2		  
   -----------------------------------------
	
SELECT A_ID, O_ID FROM(SELECT ROW_NUMBER() OVER(PARTITION BY [MAX], [MIN] ORDER BY O_ID) AS Num,
A_ID, O_ID
FROM(
select A_ID, O_ID, 
CASE WHEN A_ID>O_ID THEN A_ID ELSE O_ID END AS [MAX], 
CASE WHEN A_ID>O_ID THEN O_ID ELSE A_ID END AS [MIN]
FROM @t)T)Result
WHERE Num=1;


23 июн 11, 17:05    [10863828]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
smls
Guest
alwil,

Кажется, так по-проще будет :

DECLARE @Sample TABLE
(
val1 VARCHAR(20),
val2 VARCHAR(20)
)

-------------------
-- Populate data
INSERT @Sample
SELECT 'A', 'A' UNION ALL
SELECT 'z', 'B' UNION ALL
SELECT 'B', 'B' UNION ALL
SELECT 'C', 'B' UNION ALL
SELECT 'C', 'C' UNION ALL
SELECT 'C', 'C' UNION ALL
SELECT 'C', 'x'


; with mc as (
select val1 v1 from @Sample
union
select val2 v1 from @Sample
)
select distinct * from mc s1 inner join
mc on s1.v1<mc.v1
union
select val1,val2 from @Sample where val1=val2
11 июл 11, 17:51    [10957473]     Ответить | Цитировать Сообщить модератору
 Re: SQL комбинации  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
Нифига не понял, что именно нужно, лучше б словами описали.
select t1.val1, ca.val2
from @sample t1
  cross apply (select val2 from @sample t2 where t2.val1 = t1.val1 and t2.val2 >= t1.val2) ca;
Это?
11 июл 11, 23:53    [10958887]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить