Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Простой update  [new]
Vladsn07
Member

Откуда: Российская Федерация
Сообщений: 105
Имеется запрос
SELECT WorkOrder_Fields.UDF_CHAR1,
CASE
WHEN SUM(CASE
            WHEN WorkstationCI.ATTRIBUTE_5401='Да' THEN 1
            ELSE 0
            END
            )>0 THEN 'Да'
ELSE 'Нет'
END 
 
FROM WorkOrderStates         
        LEFT JOIN WorkOrder ON WorkOrder.WORKORDERID = WorkOrderStates.WORKORDERID   
        LEFT JOIN WorkOrder_Fields ON WorkOrder_Fields.WORKORDERID=WorkOrder.WORKORDERID    
        LEFT JOIN WorkstationCI ON Workorder.CIID = WorkstationCI.CIID
        WHERE  WorkOrderStates.STATUSID <> '3'
        GROUP BY WorkOrder_Fields.UDF_CHAR1

который выводит WorkOrder_Fields.UDF_CHAR1
Необходимо вместо вывода сделать update.
Если так:
UPDATE WorkOrder_Fields SET UDF_CHAR1=WorkstationCI.ATTRIBUTE_5401  
    FROM WorkOrderStates         
        LEFT JOIN WorkOrder ON WorkOrder.WORKORDERID = WorkOrderStates.WORKORDERID   
        LEFT JOIN WorkOrder_Fields ON WorkOrder_Fields.WORKORDERID=WorkOrder.WORKORDERID    
       LEFT JOIN IT ON IT.WORKORDERID=WorkOrder.WORKORDERID
        LEFT JOIN WorkstationCI ON Workorder.CIID = WorkstationCI.CIID
             WHERE  WorkOrderStates.STATUSID <> '3'

то update проходит, но мне нужен результат да, если имеется хотя бы 1 да, если строк с одинаковым WORKORDERID неско
6 апр 16, 16:13    [19024037]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vladsn07,

ну если только "да" проставить, то допишите в WHERE WorkstationCI.ATTRIBUTE_5401='Да'
6 апр 16, 16:17    [19024066]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
автор
если строк с одинаковым WORKORDERID неско

и HAVING
6 апр 16, 16:18    [19024075]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
Vladsn07
Member

Откуда: Российская Федерация
Сообщений: 105
TaPaK

ну если только "да" проставить, то допишите в WHERE WorkstationCI.ATTRIBUTE_5401='Да'


Второй запрос не учитывает если несколько таких строк, он учитывает только первую строку
6 апр 16, 16:26    [19024108]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Vladsn07
TaPaK
ну если только "да" проставить, то допишите в WHERE WorkstationCI.ATTRIBUTE_5401='Да'


Второй запрос не учитывает если несколько таких строк, он учитывает только первую строку

первый учитывает только хоть 1 и более "да", так что ничего не меняется, Having/Count не нужен
6 апр 16, 16:31    [19024136]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
Vladsn07
Member

Откуда: Российская Федерация
Сообщений: 105
TaPaK
Vladsn07
пропущено...


Второй запрос не учитывает если несколько таких строк, он учитывает только первую строку

первый учитывает только хоть 1 и более "да", так что ничего не меняется, Having/Count не нужен


Что-то я запутался.
6 апр 16, 17:31    [19024435]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
Vladsn07
Member

Откуда: Российская Федерация
Сообщений: 105
Собрал select
SELECT WorkOrderStates.WORKORDERID,
CASE
WHEN SUM(CASE
            WHEN WorkstationCI.ATTRIBUTE_5401='Да' THEN 1
            ELSE 0
            END
            )>0 THEN 'Да'
ELSE 'Нет'
END 
       --select *
       FROM WorkOrder_Fields 
       LEFT JOIN WorkOrderStates ON WorkOrderStates.WORKORDERID = WorkOrder_Fields.WORKORDERID
       LEFT JOIN WorkOrder ON WorkOrder.WORKORDERID = WorkOrderStates.WORKORDERID 
       left join WorkOrderToCI on WorkOrderToCI.WORKORDERID=WorkOrder.WORKORDERID
       LEFT JOIN WorkstationCI ON WorkorderTOCI.CIID = WorkstationCI.CIID
       WHERE  WorkOrderStates.STATUSID <> '3' 
 GROUP BY WorkOrderStates.WORKORDERID

который мне выводит правильные значения. Как теперь эти значения мне записать в поле?
UPDATE WorkOrder_Fields SET UDF_CHAR1=WorkstationCI.ATTRIBUTE_5401 вместо select не подходит
6 апр 16, 20:42    [19025148]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
_djХомяГ
Guest
;with cte
as
(
SELECT WorkOrderStates.WORKORDERID,
CASE
WHEN SUM(CASE
            WHEN WorkstationCI.ATTRIBUTE_5401='Да' THEN 1
            ELSE 0
            END
            )>0 THEN 'Да'
ELSE 'Нет'
END AS YourFLD
       --select *
       FROM WorkOrder_Fields 
       LEFT JOIN WorkOrderStates ON WorkOrderStates.WORKORDERID = WorkOrder_Fields.WORKORDERID
       LEFT JOIN WorkOrder ON WorkOrder.WORKORDERID = WorkOrderStates.WORKORDERID 
       left join WorkOrderToCI on WorkOrderToCI.WORKORDERID=WorkOrder.WORKORDERID
       LEFT JOIN WorkstationCI ON WorkorderTOCI.CIID = WorkstationCI.CIID
       WHERE  WorkOrderStates.STATUSID <> '3' 
 GROUP BY WorkOrderStates.WORKORDERID
)
UPDATE wof set   UDF_CHAR1=YourFlD
from WorkOrder_Fields wof join cte 
on cte.WORKORDERID=wof.WORKORDERID---если я в чем то понимаю такое условие соединения 
6 апр 16, 21:01    [19025211]     Ответить | Цитировать Сообщить модератору
 Re: Простой update  [new]
Vladsn07
Member

Откуда: Российская Федерация
Сообщений: 105
Update работает. Сложно, но работает. Спасибо
6 апр 16, 21:28    [19025281]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить