по примеру таблицы выше,то останутся только строки 2 и 4Начнём с простого: у таблиц нет номеров строк, есть только порядок сортировки. Поэтому вы должны их однозначно идентифицировать (способов множество, например, самый простой — автоинкрементный целый ID).
те у которых самый большой рейтингСоставляете запрос, группируя по блокам и вычисляя максимальное значение рейтинга. Используйте его как под-запрос при удалении и оператор IN, чтобы не удалять записи, которые ему ответствуют.
CREATE TRIGGER PersonDelete ON [Person] FOR DELETE AS
BEGIN
SET NOCOUNT ON
-- [dbo].[Variant]
DELETE FROM Variant WHERE (Variant.Kind = 'P') AND (Variant.[Object] IN ( SELECT ID FROM deleted))
-- [dbo].[Internet]
DELETE FROM Internet WHERE (Internet.Kind = 'P') AND (Internet.[Object] IN ( SELECT ID FROM deleted))
END
--
GO
CREATE TRIGGER AttributeValueUpdateDelete ON FilmAttributeValue FOR UPDATE, DELETE AS
BEGIN
SET NOCOUNT ON
UPDATE FilmAttributeGroup
SET Uses = (SELECT COUNT(*) FROM FilmAttributeValue WHERE ([Group] = deleted.[Group]))
FROM FilmAttributeGroup
INNER JOIN deleted ON FilmAttributeGroup.ID = deleted.[Group]
END
--
GO
Сначала строки от 150 до 180, далее 100 - 149, далее 181 - 199Сделайте три запроса с нужными диапазонами и ОБЪЕДИНИТЬ их.
ВЫБРАТЬ 1, Номенклатура.Расположение КАК Расположение
ИЗ Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Расположение >= 150 И Номенклатура.Расположение <= 180
ОБЪЕДИНИТЬ
ВЫБРАТЬ 2, Номенклатура.Расположение КАК Расположение
ИЗ Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Расположение >= 100 И Номенклатура.Расположение <= 150
ОБЪЕДИНИТЬ
ВЫБРАТЬ 3, Номенклатура.Расположение КАК Расположение
ИЗ Справочник.Номенклатура КАК Номенклатура
ГДЕ Номенклатура.Расположение >= 181 И Номенклатура.Расположение <= 199
УПОРЯДОЧИТЬ ПО 1, 2
Что лучше триггер или процедура?В процедуру не передаются таблицы inserted и deleted, они требуют явного вызова. А в триггерах запрещены некоторые операции.
И почему не запихнуть бы всю логику в процедуры?Можно, некоторые так и делают: проще поддерживать (DBA никакого отношения к программированию процедур не имеет — администратор); в общем случае, процедуры лучше кэшируются и пр.
Мне нужно оставить только одну строку с этим значением. Подскажите пожалуйста, как это сделать?А как PostgreSQL догадается какую?
DELETE FROM TestTable
WHERE (f1 = 'НужноУдалить') AND (ID <> НужноОставить)
Хочется, чтобы в пределах каждого мероприятия у участников и сплитов ID-шники начинались снова с единицы.Пронумеровать участников — это понятно и необходимо (или присвоить им постоянные номера). Пронумеровать мероприятия тоже нужно (этап 10 — понятно). А вот сквозная нумерация отсечек — совершенно не информативно — нумеровать их нужно для каждого участника отдельно, например, 85.25 — участник №85, отметка №25.
Если не отходить от такого способа, нужно как-то скормить SQL Server-у имя таблицы, сгененированное автоматически.EXECUTE
Это возможно?
Можно ли реализовать одну большую таблицу со всеми связями( так как набором полей не отличаются ), добавив поле тип_связи, и производя выборку конкретных записей в проекте уже по данному типу?Можно, только вы не можете построить внешний ключ без бубна и в JOIN нужно будет добавлять условие с "тип_связи".
Поле ep.type_op имеет несколько значений, а мне нужно только два.
мне нужно получить параметр если меньше 30 то 'значение 1' в противном случае 'значение 2' - > то что я описал с помощью CASE в селекте.Добавьте в таблицу вычисляемое поле или сделайте представление.
if (OrderView.ZQueryBasket.Active = True) and then
OrderView.ZQueryBasket.Edit
else ShowMessage('Сообщение1');
if (Quantity.Text = '') or (Name.Text = '') then ShowMessage('Сообщение 2!')
else
begin
OrderView.ZQueryBasket.Post; // Проверка, если записей 3, то пересчитываем всем колонку "Сумма скидки"
OrderView.ZQueryBasket.Last;
if OrderView.ZQueryBasket.RecordCount > 2 then
if ( OrderView.ZQueryBasket.Active = True ) and ( OrderView.ZQueryBasket.RecordCount > 2 ) then
Хотелось бы получить универсальный sql-запросУ вас нет ключа. Если для него вы используете num+txt, то при изменении получите либо запрет изменения (ошибку), либо неопределённость записи (ошибка).
также присутствует IDСтройте курсор. Определяйте переменную и начинайте считать в ней строки с 1 до изменения num.