====== SQL-скрипты ====== Могут пригодиться в особых ситуаций для решения проблем, для которых не предусмотрено кнопок в интерфейсе "админки". ===== Скрипт, сбрасывающий блокировки получателей рассылок в telegram ===== Tсли система конкретному гостю трижды не смогла отправить сообщение, то она перестанет пытаться это делать до тех пор, пока гость не проявит какую-то активность в боте. Чтобы сбросить эту блокировку - можно использовать скрипт: UPDATE additional_contact SET telegram_fail_count = 0 WHERE type = 1 AND is_deleted = 0 AND telegram_fail_count > 0; ==== Скрипт, позволяющий посчитать через заказы какого официанта было большее начисление бонусов за период ==== WITH EmployeeBonuses AS ( SELECT c.[id] as check_id, EmployeeNode.value('@name', 'NVARCHAR(255)') AS EmployeeName, EmployeeNode.value('@code', 'NVARCHAR(50)') AS EmployeeCode, EmployeeNode.value('@role', 'NVARCHAR(10)') AS EmployeeRole, EmployeeNode.value('@id', 'NVARCHAR(100)') AS EmployeeId, (SELECT SUM(BonusNode.value('@sum', 'DECIMAL(18,2)')) FROM c.xml_native.nodes('/CHECK/CHECKDATA/CHECKBONUSES/BONUS') AS T(BonusNode) ) AS CheckBonusSum FROM [dbo].[check] c CROSS APPLY c.xml_native.nodes('/CHECK/CHECKDATA/CHECKPERSONS/PERSON') AS T(EmployeeNode) ) SELECT EmployeeName, EmployeeCode, EmployeeRole, SUM(CheckBonusSum) AS TotalBonus, COUNT(DISTINCT check_id) AS CheckCount FROM EmployeeBonuses WHERE CheckBonusSum IS NOT NULL GROUP BY EmployeeName, EmployeeCode, EmployeeRole ORDER BY TotalBonus DESC;