database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7211 게시물 읽기
No. 7211
순열 SQL 입니다.. 중복되지 않는 조합식으로 바꾸려 합니다..
작성자
빨간모자(redhat4u)
작성일
2020-04-09 03:51ⓒ
2020-04-09 03:54ⓜ
조회수
1,918
 declare @categories TABLE ( ID nvarchar(max),
 
CatCode nvarchar(max)
)
 
insert into @categories
values ('01', 'A'), ('02', 'B'), ('03', 'C'), ('04', 'D'), ('05', 'E'), ('06', 'F'), ('07', 'G'), ('08', 'H'), ('09', 'I');
-- ('10', 'J'), ('11', 'K'), ('12', 'L'), ('13', 'M'), ('14', 'N'), ('15', 'O'), ('16', 'P'), ('17', 'Q'), ('18', 'R');
 
Declare @counter int
Select @counter = COUNT(*)
from @categories;
 
With Permutations (permutation, IDs, Depth)
AS (
Select c.CatCode,
c.ID + ';',
Depth = 1
From @categories c
 
union all
 
Select permutation + c.CatCode,
IDs + ID + ';',
Depth = Depth + 1
  
from @categories as c,
Permutations as p
 
Where p.Depth < @counter
AND IDs not like '%' + ID + ';%'
)
 
Select *
from Permutations
where Depth = @counter
order by permutation
 
 
순열 sql 인데요.. 중복되지 않게 9개(I) 중에 3개씩 묶는 조합으로 할려면 어떻게 바꿔야 할까요?
초보라 막막하네요..  고수님들 한수 부탁드립니다... 
 
이 글에 대한 댓글이 총 4건 있습니다.

원하는 결과표를 보여주세요.

WITH Categories AS
(
SELECT '01' ID, 'A' CatCode
UNION ALL SELECT '02', 'B'
UNION ALL SELECT '03', 'C'
UNION ALL SELECT '04', 'D'
UNION ALL SELECT '05', 'E'
UNION ALL SELECT '06', 'F'
UNION ALL SELECT '07', 'G'
UNION ALL SELECT '08', 'H'
UNION ALL SELECT '09', 'I'
--UNION ALL SELECT '10', 'J'
--UNION ALL SELECT '11', 'K'
--UNION ALL SELECT '12', 'L'
--UNION ALL SELECT '13', 'M'
--UNION ALL SELECT '14', 'N'
--UNION ALL SELECT '15', 'O'
--UNION ALL SELECT '16', 'P'
--UNION ALL SELECT '17', 'Q'
--UNION ALL SELECT '18', 'R'
)
, Permutations AS
(
SELECT 1 Depth
     , ID
     , CatCode
     , CAST(CatCode AS NVARCHAR(99)) Permutation
  FROM Categories
 UNION ALL
SELECT p.Depth + 1 Depth
     , c.ID
     , c.CatCode
     , CAST(CONCAT(p.Permutation, ';', c.CatCode) AS NVARCHAR(99)) Permutation
  FROM Permutations p
 INNER JOIN Categories c
    ON p.ID < c.ID    -- 중복되지 않게
 WHERE p.Depth < 3    -- 3개 까지만
)
SELECT Permutation
  FROM Permutations
 WHERE Depth = 3      -- 3개 짜리만
 ORDER BY Permutation
;

마농(manon94)님이 2020-04-09 08:45에 작성한 댓글입니다.
이 댓글은 2020-04-09 09:04에 마지막으로 수정되었습니다.

 감사합니다. 근데 원래는  테이블로부터 자료를 넘겨받아서 몇개로 묶을건지 인수값만 변수로 넘겨주면 중복 순서 상관없는 조합(combination) 함수를 찾다가 순열 sql이 있어서 수정해보려 한겁니다.  그런 함수는 없을까요? ^^

빨간모자님이 2020-04-09 11:30에 작성한 댓글입니다.
이 댓글은 2020-04-09 12:02에 마지막으로 수정되었습니다. Edit

1. WITH Categories 대신 실제 테이블 쓰시면 됩니다.
2. 숫자 3 대신 변수 쓰시면 됩니다.

마농(manon94)님이 2020-04-09 12:09에 작성한 댓글입니다.
이 댓글은 2020-04-09 13:02에 마지막으로 수정되었습니다.

 감사합니다. 저녁때 테스트 해보겠습니다 ^^

빨간모자(redhat4u)님이 2020-04-09 13:43에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7214또다른 조합 sql ㅡ 실행파일 내용
빨간모자
2020-04-09
1786
7213또다른 조합 sql [3]
빨간모자
2020-04-09
1992
7212도와주세요~ 10분에 10개의 다른 종류 과일 찾기 [1]
유아무개
2020-04-09
1859
7211순열 SQL 입니다.. 중복되지 않는 조합식으로 바꾸려 합니다.. [4]
빨간모자
2020-04-09
1918
7210오라클 프로시져를 MSSQL SP로 변환하는데 도움이 필요합니다. [1]
정희준
2020-04-07
1861
7209한번 더 도와 주세요.. 부탁 드립니다. [2]
초보초보
2020-02-19
2050
7208근사값 찾는 쿼리 한번 더 부탁 드립니다. 죄송합니다. [2]
초보초보
2020-02-18
1960
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다