Как динамически заменить значение столбца другим значением на основе условия - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь динамически изменить значение поля с помощью запроса на выборку на основе предыдущего номера комнаты человека.

Ниже приведены пример данных и запрос, который я пробовал. Но он выдает ошибку, говорящую о том, что внутренний запрос возвращает несколько значений.

      ,A.[Room],A.[CSR],A.[MemberShip],A.[NatCode]
      ,A.[MarketCode],A.[Adult],A.[Children],A.[ArrDate]
      ,A.[DepDate],A.[ResvStatus], CASE WHEN A.[Room]>9000 THEN (SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName) ELSE A.[Room] END AS [Room]
  FROM [ITHAAFUSHI].[dbo].[RESDETAILS] A
  WHERE [GuestName]= 'Mr Jobin Joseph' 
   GROUP BY 
       A.[BusinessDate],A.[GuestName],A.[TravelAgent]
      ,A.[Room],A.[CSR],A.[MemberShip],A.[NatCode]
      ,A.[MarketCode],A.[Adult],A.[Children],A.[ArrDate]
      ,A.[DepDate],A.[ResvStatus]

"Подзапрос возвратил более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется каквыражение. "

Raw data

Ниже приведен ожидаемый результат, если номер комнаты> 9000

Expected result

1 Ответ

0 голосов
/ 01 октября 2019

Ваш (SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName) возвращает более 1 строки, поэтому вам нужно использовать группу внутри:

SELECT MIN(A.[Room])FROM [RESDETAILS] C WHERE C.GuestName=A.GuestName GROUP BY C.GuestName)

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