У меня есть SQL-представление, созданное уже &, которое показывает определенные столбцы из таблицы базы данных Data
. Теперь я хочу изменить это представление таким образом, что ему не нужно добавлять какие-либо дополнительные столбцы в результат. & должен точно совпадать с тем же результатом, что и предыдущее представление. Единственная модификация, которую я хочу здесь: есть столбец с именем PayDate
, который занимает от Data
. Мне нужна эта колонка, чтобы иметь значение в зависимости от другого столбца с именем OrderType
. Таблица Data
выглядит следующим образом:Нужна помощь в изменении SQL-представления
Book OrderType PayDate ValuDate
-------------------------------------------
FFF CA 21/05/2015 NULL
BBB CO NULL 2/02/2014
EEE IO NULL 3/2/2014
QQQ Dividend 02/02/2014 NULL
В настоящее время вид дает OrderType
& Paydate
в результате. Twist здесь, для OrderType = 'CA' OR 'Dvidend'
у нас есть PayDate
. Для OrderType = 'CO' OR 'IO'
у нас есть ValuDate
. Каждый раз для «CO» или «IO» полученное значение равно NULL. Поэтому здесь я хочу CASE, который проверит, будет ли OrderType
'CO' ИЛИ 'IO', он вернет ValuDate
в столбец PayDate. А в местах, где OrderType
- это «CA» или «Dividend», укажите значение PayDate
от Data
Таблица в PayDate
Столбец зрения.
PS: Не хочу добавлять колонку ValuDate
здесь. Все, что нам нужно просто поставить значение ValueDate
в PayDate
колонке зрения, если OrderType
является «CO» или «IO'`
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[ABC]'))
BEGIN
DROP VIEW [dbo].[ABC]
PRINT '<<< DROPPED VIEW [dbo].[ABC] >>>'
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW [dbo].[ABC]
AS
SELECT ISNULL(Book, '') + '_' + ISNULL(OrderType,'') + '_'
+ ISNULL(CONVERT(VARCHAR(8), PayDate, 112), '') + '_'
MAX(t.[InstrumentKey]) [InstrumentKey] ,
MAX(t.[BookKey]) [BookKey] ,
t.[OrderType],
MAX(t.[InstrumentID]) [InstrumentID] ,
t.PayDate ,
FROM dbo.Data t (NOLOCK)
LEFT OUTER JOIN dbo.ExtInstrument i ON t.InstrumentKey = i.InstrumentKey
WHERE [STATUS] = 'LIVE'
GROUP BY Book ,
OrderType ,
PayDate ,
BackToBackBook
GO
PRINT '<<< CREATED VIEW [dbo].[ABC] >>>'
GRANT SELECT ON dbo.ABC TO INVENTORY_READERS
GO
PRINT '<<< GRANT SELECT ON VIEW [dbo].[ABC] TO INVENTORY_READERS >>>'
GO
В чем проблема? Вы получаете сообщение об ошибке при добавлении CASE? Что такое текст ошибки и как вы изменили представление? –
Можем ли мы это сделать с помощью UNION? –