Составьте все слова со специальным списком символов в каждой позиции SQL-сервера - PullRequest
0 голосов
/ 09 июня 2018

У меня есть таблица, похожая на эту

CREATE TABLE [dbo].[Test](
[harfno] INT,
[harf] NCHAR(1) NULL
)

и ниже значения количества строк и harfno является переменной

INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (1,'a')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (2,'b')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (3,'c')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (3,'d')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (4,'e')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (5,'f')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (5,'g')
INSERT INTO [dbo].[Test]([harfno],[harf]) VALUES (5,'h')

Мне нужен вывод, как это: все слова со списком специальных символов в каждомposition, position is harfno в каждом harfno, может быть, у меня больше, чем на char

word
abcef
abceg
abceh
abdef
abdeg
abdeh

1 Ответ

0 голосов
/ 09 июня 2018

Наивный подход:

SELECT t1.harf + t2.harf+ t3.harf+ t4.harf+ t5.harf AS word
FROM Test t1, Test t2, Test t3, Test t4, Test t5
WHERE t1.harfno=1
  AND t2.harfno=2
  AND t3.harfno=3
  AND t4.harfno=4
  AND t5.harfno=5;

DBFidlde Demo

РЕДАКТИРОВАТЬ:

Рекурсивный CTE:

WITH cte(harf, harfno) AS (
   SELECT CAST(harf AS NVARCHAR(MAX)), 1 AS harfno
   FROM Test
   WHERE harfno=1
   UNION ALL
   SELECT c.harf + t.harf,t.harfno
   FROM Test t
   JOIN cte c
     ON t.harfno = c.harfno+1
)
SELECT * 
FROM cte
WHERE LEN(harf)= (SELECT MAX(harfno) FROM cte)
ORDER BY harf
--OPTION(MAXRECURSION nn) 

DBFiddle Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...