Замещение одного значения на другое во View
Добавлено: 20 май 2008, 13:55
Необходимо во view сделать так, чтобы в выводимой колонке выводилось значение 'заявка закрыта' если в одном из полей в таблице стоит значение 'closed'.
Т.е. вместо steps.Name AS [Текущий этап], нужно поставить чтото вроде: if BPMS.dbo.WRunFlow.TypeFlow = 'Close' then REPLACE(steps.Name, '%', 'Бизнес процесс завершен') AS [Текущий этап]
Но видимо if не работает в селекте. Функцией тоже не получается.
Сам запрос:
SELECT BPMS.dbo.WRunFlow.TypeFlow AS Чернослив, dbo.OT189.CardID, dbo.OT189.RegNum AS [Рег № проекта],
BPMS.dbo.WRunFlow.DateCreation AS [Дата регистрации], dbo.OT189.OT189_F1911 AS [Предмет договора],
dbo.Korrespondent.OrgName AS Контрагент, ISNULL(Сотрудник2.Surname, '') + ' ' + ISNULL(Сотрудник2.Name, '')
+ ' ' + ISNULL(Сотрудник2.MName, '') AS [Ответственный исполнитель], ISNULL(back_count.c, 0) AS [Возвратов на доработку]
, steps.Name AS [Текущий этап], ISNULL(stepEmpl.Surname, '') + ' ' + ISNULL(stepEmpl.Name, '') + ' ' + ISNULL(stepEmpl.MName, '')
AS [Текущий исполнитель], ISNULL(CONVERT(nvarchar(200), steps.DateOpen, 104) + ' ' + CONVERT(nvarchar(10), steps.DateOpen, 108), '')
AS [Дата открытия]
FROM dbo.OT189 LEFT OUTER JOIN
dbo.Korrespondent ON dbo.Korrespondent.Id = dbo.OT189.idKorrespondent_eecbfa5c_b670_41bc_84e0_1e04d651350e INNER JOIN
BPMS.dbo.WRunFlow ON BPMS.dbo.WRunFlow.IDOuterObject = dbo.OT189.CardID INNER JOIN
(SELECT acts1.ID, acts1.IDRunFlow, acts1.IDStep, acts1.Name, acts1.Description, acts1.Type, acts1.DateCreation, acts1.DateOpen,
acts1.DateClose, acts1.DateLastChange, acts1.LastUserID, acts1.Empl, acts1.LastStepID, acts2.runID, acts2.dateCreat
FROM BPMS.dbo.WActsLog AS acts1 INNER JOIN
(SELECT IDRunFlow AS runID, MAX(DateCreation) AS dateCreat
FROM BPMS.dbo.WActsLog
GROUP BY IDRunFlow) AS acts2 ON acts1.IDRunFlow = acts2.runID AND acts1.DateCreation = acts2.dateCreat) AS steps ON
steps.IDRunFlow = BPMS.dbo.WRunFlow.ID LEFT OUTER JOIN
dbo.Сотрудник AS stepEmpl ON stepEmpl.PersonID = steps.LastUserID INNER JOIN
dbo.Сотрудник AS Сотрудник2 ON Сотрудник2.PersonID = dbo.OT189.idWorkers_4cd3957c_3cca_4eb2_8615_13d6bf150a02 INNER JOIN
(SELECT RegNum, ISNULL(OT189_F1975, '1') AS a
FROM dbo.OT189 AS OT189_1) AS status2 ON status2.RegNum = dbo.OT189.RegNum LEFT OUTER JOIN
(SELECT IDRunFlow, COUNT(*) AS c
FROM BPMS.dbo.WActsLog AS WActsLog_1
WHERE (Name LIKE '%устранение%')
GROUP BY IDRunFlow) AS back_count ON back_count.IDRunFlow = BPMS.dbo.WRunFlow.ID
WHERE (BPMS.dbo.WRunFlow.TypeFlow <> 'Close')
Понимаю что в чужом коде никто не любит ковыряться, но думаю кто наверняка знает как это сделать, сможет помочь.
Зарание благодарю
Т.е. вместо steps.Name AS [Текущий этап], нужно поставить чтото вроде: if BPMS.dbo.WRunFlow.TypeFlow = 'Close' then REPLACE(steps.Name, '%', 'Бизнес процесс завершен') AS [Текущий этап]
Но видимо if не работает в селекте. Функцией тоже не получается.
Сам запрос:
SELECT BPMS.dbo.WRunFlow.TypeFlow AS Чернослив, dbo.OT189.CardID, dbo.OT189.RegNum AS [Рег № проекта],
BPMS.dbo.WRunFlow.DateCreation AS [Дата регистрации], dbo.OT189.OT189_F1911 AS [Предмет договора],
dbo.Korrespondent.OrgName AS Контрагент, ISNULL(Сотрудник2.Surname, '') + ' ' + ISNULL(Сотрудник2.Name, '')
+ ' ' + ISNULL(Сотрудник2.MName, '') AS [Ответственный исполнитель], ISNULL(back_count.c, 0) AS [Возвратов на доработку]
, steps.Name AS [Текущий этап], ISNULL(stepEmpl.Surname, '') + ' ' + ISNULL(stepEmpl.Name, '') + ' ' + ISNULL(stepEmpl.MName, '')
AS [Текущий исполнитель], ISNULL(CONVERT(nvarchar(200), steps.DateOpen, 104) + ' ' + CONVERT(nvarchar(10), steps.DateOpen, 108), '')
AS [Дата открытия]
FROM dbo.OT189 LEFT OUTER JOIN
dbo.Korrespondent ON dbo.Korrespondent.Id = dbo.OT189.idKorrespondent_eecbfa5c_b670_41bc_84e0_1e04d651350e INNER JOIN
BPMS.dbo.WRunFlow ON BPMS.dbo.WRunFlow.IDOuterObject = dbo.OT189.CardID INNER JOIN
(SELECT acts1.ID, acts1.IDRunFlow, acts1.IDStep, acts1.Name, acts1.Description, acts1.Type, acts1.DateCreation, acts1.DateOpen,
acts1.DateClose, acts1.DateLastChange, acts1.LastUserID, acts1.Empl, acts1.LastStepID, acts2.runID, acts2.dateCreat
FROM BPMS.dbo.WActsLog AS acts1 INNER JOIN
(SELECT IDRunFlow AS runID, MAX(DateCreation) AS dateCreat
FROM BPMS.dbo.WActsLog
GROUP BY IDRunFlow) AS acts2 ON acts1.IDRunFlow = acts2.runID AND acts1.DateCreation = acts2.dateCreat) AS steps ON
steps.IDRunFlow = BPMS.dbo.WRunFlow.ID LEFT OUTER JOIN
dbo.Сотрудник AS stepEmpl ON stepEmpl.PersonID = steps.LastUserID INNER JOIN
dbo.Сотрудник AS Сотрудник2 ON Сотрудник2.PersonID = dbo.OT189.idWorkers_4cd3957c_3cca_4eb2_8615_13d6bf150a02 INNER JOIN
(SELECT RegNum, ISNULL(OT189_F1975, '1') AS a
FROM dbo.OT189 AS OT189_1) AS status2 ON status2.RegNum = dbo.OT189.RegNum LEFT OUTER JOIN
(SELECT IDRunFlow, COUNT(*) AS c
FROM BPMS.dbo.WActsLog AS WActsLog_1
WHERE (Name LIKE '%устранение%')
GROUP BY IDRunFlow) AS back_count ON back_count.IDRunFlow = BPMS.dbo.WRunFlow.ID
WHERE (BPMS.dbo.WRunFlow.TypeFlow <> 'Close')
Понимаю что в чужом коде никто не любит ковыряться, но думаю кто наверняка знает как это сделать, сможет помочь.
Зарание благодарю