Сгенерировать выходной столбец на основе предложения where

#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. Это было именно то, что я искал!!!!!!!!!!!!!! большое вам спасибо