Запрос SQL Server для группировки записей и вставки в другие таблицы - PullRequest
0 голосов
/ 16 апреля 2019

Я использую базу данных SQL Server, в которой есть таблицы x, y и таблица сопоставления xy.

У меня есть таблица X с x_id, датой, текстом и идентификатором получателя, а также таблица сопоставления xy с x_id и y_id. Мне нужен скрипт для генерации таблиц XY и Y таким образом, чтобы для каждого уникального текста должна быть запись в таблице y, а в зависимости от количества получателей должно быть отображение в таблице XY. столбец даты в таблице Y должен быть заполнен самой короткой датой для этого конкретного текста.

Таблица: х

x_id             date               text           receiver
---------------------------------------------------------
| 1  |  2019-02-22 20:40:30.617  |    txt1   |        4
| 2  |  2019-02-22 20:40:06.103  |    txt1   |        5
| 3  |  2019-02-22 20:28:21.393  |    txt2   |        4

Итак, окончательные данные в XY & Y для вышеуказанных записей должны заканчиваться на

Таблица: Y

y_id             date               text
---------------------------------------------
| 1  |  2019-02-22 20:40:06.103   |    txt1   | 
| 2  |  2019-02-22 20:28:21.393   |    txt2   |

Таблица: XY

y_id   x_id 
-----------
| 1  |  1  
| 1  |  2 
| 2  |  3  

1 Ответ

1 голос
/ 16 апреля 2019

сначала получите данные для таблицы Y и вставьте, я использовал номер строки для идентификатора таблицы Y, вы можете создать для этого идентификатор, если хотите.второй выберите данные для таблицы XY с объединением со свойством текста таблицы X и Y.

, пожалуйста, не используйте ключевые слова для имени поля, такие как текст или дата.

DECLARE @x TABLE(
x_id int,
date datetime,
text varchar(100),
receiver int
)

insert INTO @x
(
    x_id,
    [date],
    [text],
    receiver
)
VALUES
(1,'2019-02-22 20:40:30.617 ','txt1',4),
(2,'2019-02-22 20:40:06.103 ','txt1',5),
(3,'2019-02-22 20:28:21.393 ','txt2',4)


--for Y table
--insert into Y
SELECT ROW_NUMBER() OVER(ORDER BY [text] ASC) AS Id, Min(date) AS [date], [text] 
INTO #Y
FROM @x
GROUP BY [text]

--for XY table
SELECT Y.Id AS y_id, X.x_Id AS x_id FROM @x AS X
    INNER JOIN #Y Y ON X.[text] = Y.[text]

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