#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть скрипт:
SELECT DMC
,a.[id]
,a.[PSN]
,a.[Status]
,a.[CreationDate]
,a.[DBInsertDatetime]
,c.Wuchtvers_anz
,c.[MD1_ANLIEF_MG]
,c.[MD2_ANLIEF_G]
FROM
[tblTcInfo] a
inner join [dbo].[tblC] b on a.PSN=b.PSN
inner join [Daten] c on DMC=LGNR
where a.PSN in (select a.PSN from [tblTcInfo] a inner join [dbo].[tblC] b on a.PSN=b.PSN
where DMC in
(
'75044500718481203100--1802290018'
)
что дает мне вывод:
DMC id PSN Status CreationDate DBInsertDatetime Wuchtvers_anz MD1_ANLIEF_MG MD2_ANLIEF_G
00003064418481504503--1735304527 5861374 7500421056230120180527148491 1 2018-01-23 05:34:19.000 2018-01-23 05:34:19.680 2 7,72 169
00003064418481504503--1735304527 5861374 7500421056230120180527148491 1 2018-01-23 05:34:19.000 2018-01-23 05:34:19.680 2 7,72 169
Я ожидал, что результат:
DMC id PSN Status CreationDate DBInsertDatetime Wuchtvers_anz MD1_ANLIEF_MG MD2_ANLIEF_G Input_column
00003064418481504503--1735304527 5861374 7500421056230120180527148491 1 2018-01-23 05:34:19.000 2018-01-23 05:34:19.680 2 7,72 169 75044500718481203100--1802290018
00003064418481504503--1735304527 5861374 7500421056230120180527148491 1 2018-01-23 05:34:19.000 2018-01-23 05:34:19.680 2 7,72 169 75044500718481203100--1802290018
Невозможно использовать решение, подобное:
'75044500718481203100--1802290018' as Input_column
потому что у меня было бы много строк для ввода в предложении where.
Я пытался использовать несколько set
в сочетании с declare
, но это все еще не работает. И еще один вариант, который я нашел, используя declare
with insert
, но здесь я должен объявлять каждую переменную. Эта таблица [tblTcInfo] сложная!!!!!!!!!! — Я могу фильтровать
DMC
по ex. 2
и получить 3
. Не спрашивайте меня, почему! так оно и есть. Я действительно ценю вашу помощь.
Комментарии:
1. Почему вы не можете использовать псевдоним для этой строки? Откуда взялась эта строка? Вы просите людей угадать. И попробуйте прочитать изображение с низким разрешением, чтобы понять, чего вы хотите. Опубликуйте схему таблицы, фактический запрос, который вы использовали, и ожидаемые результаты в виде текста в самом вопросе. Если вы используете SSMS в качестве клиентского инструмента, вы можете скопировать результаты и заголовки, щелкнув по верхнему левому квадрату сетки, чтобы выбрать все результаты, щелкните правой кнопкой мыши и выберите
Copy with Headers
2.
WHERE
Предложение фильтрует данные, это не влияет на то, что выбирается. Это задачаSELECT
предложения. Если вы хотите отобразить там какой-либо входной параметр, вы должны включить его. Вот почему источник этой строки важен. Это один параметр? Переменная? Возможно, это происходит из параметра таблицы или результатов другого запроса?3. @PanagiotisKanavos, только что добавил ожидаемый вывод. Входной параметр — это один параметр, который берется из параметра таблицы
4. Затем опубликуйте фактический код. Вам все равно придется присоединиться к TVP, чтобы получить значение из его столбца. Вы можете использовать то же имя столбца в предложении SELECT . Если вы используете
WHERE IN (select ... from @tvp)
предложение, вам нужно будет изменить его на что-то, что также возвращает значение столбца, которое вы хотите5. @PanagiotisKanavos единственный фактический код, который я использую, — up, и about TVP будет использовать ваши рекомендации, может быть, у вас есть хороший пример ссылки, как это сделать, извините, никогда не использовал его раньше: (
Ответ №1:
Вам нужно перефразировать логику, используя a JOIN
, чтобы нужные столбцы были доступны для внешнего запроса.
В вашем случае это сложнее, потому что:
- Ваши псевдонимы таблиц не являются сокращениями для имен таблиц, поэтому запрос трудно выполнить.
- Вы не указываете все имена своих столбцов.
После реструктуризации запроса столбец становится доступным:
select i.DMC, i.[id], i.[PSN], i.[Status], i.CreationDate, i.[DBInsertDatetime],
d.Wuchtvers_anz, d.MD1_ANLIEF_MG, d.MD2_ANLIEF_G,
cc.DMC as input_DMC
from tblTcInfo i join
[dbo].[tblC] c
on i.PSN = c.PSN join
Daten d
on i.DMC = d.LGNR join -- I am guessing where these comes from
(select distinct ?.DMC, ci.PSN
from tblTcInfo ci join
dbo.tblC c2
on ci.PSN = c2.PSN
where ?.DMC in ('75044500718481203100--1802290018')
) cc
on a.PSN = cc.PSN;
Комментарии:
1. Это было именно то, что я искал!!!!!!!!!!!!!! большое вам спасибо