То, что я считал довольно простым, кажется, немного сложнее, чем я ожидал.PIVOT динамически, возвращенные результаты из JOIN из двух таблиц
У меня есть две таблицы. С отношением «один ко многим». То, что я пытаюсь сделать, - это любая запись, возвращаемая таблицей 2. Я хочу, чтобы она была в отдельном столбце. Мне удалось сделать это в следующем запросе с относительными небольшими данными и узнать, что возвращается второй таблицей.
Примеры данных
DECLARE @TABLE1 TABLE(UserID INT,Episode INT ,[Value] VARCHAR(100))
INSERT INTO @TABLE1 VALUES
(1, 1,'VALUE 1-1'),(1, 2,'VALUE 1-2')
DECLARE @TABLE2 TABLE(UserID INT,Episode INT ,[Details] VARCHAR(100))
INSERT INTO @TABLE2 VALUES
(1, 1,'Details 1'),(1, 1,'Details 2'),(1, 2,'Details 1'),(1, 2,'Details 2')
Простой Регистрация
SELECT ONE.UserID
, ONE.Episode
, ONE.Value
, TWO.Details
FROM @TABLE1 ONE INNER JOIN @TABLE2 Two
ON ONE.UserID = TWO.UserID
AND ONE.Episode = TWO.Episode
╔════════╦═════════╦═══════════╦═══════════╗
║ UserID ║ Episode ║ Value ║ Details ║
╠════════╬═════════╬═══════════╬═══════════╣
║ 1 ║ 1 ║ VALUE 1-1 ║ Details 1 ║
║ 1 ║ 1 ║ VALUE 1-1 ║ Details 2 ║
║ 1 ║ 2 ║ VALUE 1-2 ║ Details 1 ║
║ 1 ║ 2 ║ VALUE 1-2 ║ Details 2 ║
╚════════╩═════════╩═══════════╩═══════════╝
В этом случае я хотел бы PIVOT
Описание столбцов. Что мне удалось сделать с довольно простой PIVOT запрос следующим образом
PIVOT Запрос
SELECT * FROM
(
SELECT ONE.UserID
, ONE.Episode
, ONE.Value
, TWO.Details
FROM @TABLE1 ONE INNER JOIN @TABLE2 Two
ON ONE.UserID = TWO.UserID AND ONE.Episode = TWO.Episode)Q
PIVOT (MAX(Details)
FOR Details
IN ([Details 1], [Details 2]))p
╔════════╦═════════╦═══════════╦═══════════╦═══════════╗
║ UserID ║ Episode ║ Value ║ Details 1 ║ Details 2 ║
╠════════╬═════════╬═══════════╬═══════════╬═══════════╣
║ 1 ║ 1 ║ VALUE 1-1 ║ Details 1 ║ Details 2 ║
║ 1 ║ 2 ║ VALUE 1-2 ║ Details 1 ║ Details 2 ║
╚════════╩═════════╩═══════════╩═══════════╩═══════════╝
Это именно то, что я хочу, все записи возвращаются из таблицы два в Колонном Названный как Details 1
, Details 2
и Details 3
и т. Д.
В этом случае это сработало, потому что данные, перенастроенные сами по себе, являются строками как «Детали 1», «Детали 2» и «Детали 3».
Но когда я не знаю, сколько строк будет возвращено из таблицы2, и какими будут данные, с которыми я борюсь, чтобы развернуть это.
также еще одна важная вещь состоит в том, что данные, возвращаемые из таблицы 2, составляют Large Text values
, состоящий из нескольких столбцов, объединенных.
Я пытался следовать логике, приведенной в this, this и this вопросы, но не радость.
Любая помощь любой указатель в правильном направлении очень ценится, спасибо заранее.
Вам придется написать Dynamic SQL для обработки этого случая в SQL. –
Весь вопрос. Я видел, где люди использовали динамический sql для достижения этого результата, динамический sql зависит от данных, перенастроенных из объединения. В моем случае данные возвращаются, это длинное текстовое значение can not действительно думает о том, как использовать этот возвращенный текст в my pivot query: S –
Если вы не хотите использовать длинный текст в качестве имени столбца, какие имена столбцов вы хотите использовать? Просто что-то генерируется, как 'col1',' col2'? – FrankPl