#sql-server
#sql-сервер
Вопрос:
Ниже приведен мой запрос
SELECT
P.PlanName
V.Section
FROM
app.Plan P
CROSS APPLY
(VALUES ('Protective'), ('Effective'), ('EasyClaim')) V(Section);
в запросе это возвращает значение в V.Section
, где, поскольку я хочу получить значение этого столбца из табличной переменной.
Комментарии:
1. Для этого вам не нужно
VALUES
создавать таблицу; простоJOIN
ваша таблицаapp.Plan
с табличной переменной *, которую вы не показываете в своем вопросе)Plan
.2. Я могу присоединить запрос к моей табличной переменной, но в моем запросе select мне все равно нужно указать имя столбца моей табличной переменной, данные которой мне нужно извлечь… Это имя столбца будет V.Section КАК [Section]
3. Имя столбца будет в таблице, которую можно изменить, @Sayan, это будут имена столбцов. Вы не можете использовать данные строки для определения имени столбца без динамического SQL, и я сомневаюсь, что это требуется. В вашей табличной переменной уже должно быть 3 столбца с именами
Protective
,Effective
, иEasyClaim
; нет необходимости в созданииVALUES
таблицы.4. Вашему подзапросу, который выбирает из вашей табличной переменной, явно указано использовать значение V .
SELECT V.Section FROM @TabVariable WHERE Name = P.[PlanName]
. Предполагая, что ваша табличная переменная имеет столбец с именем «Section», удалитеV.
из вашего подзапроса Rating . Вам нужно будет указать псевдоним@TabVariable
и ссылаться на него, если имена столбцов совпадают.
Ответ №1:
Как я уже говорил в комментариях, вам не нужна конструкция VALUES
таблицы; просто JOIN
для вашей табличной переменной:
SELECT P.Plan,
TV.Protective,
TV.Effective,
TV.EasyClaim
FROM app.Plan P
LEFT JOIN @TableVariable TV ON P.Plan = TV.Plan; --I assume LEFT JOIN as otherwise you just want
--SELECT * FROM @TableVariable;
Если вы хотите, чтобы значения для были 0
там, где JOIN
сбой, тогда вы используете use ISNULL
или COALESCE
. Например: ISNULL(TV.Protective,0) AS Protective
Комментарии:
1. Я использовал этот запрос, он просто возвращает 6 строк с именами моих планов и разделов, а также Protective, Effective и EasyClaim в качестве столбцов, но где, поскольку мне нужны Protective, Effective и EasyClaim в качестве строк рядом с каждым планом
2. Я думаю, что пришло время для выборки данных и ожидаемых результатов, @Sayan; ты не придаешь этому никакого смысла.