удаление списка групп в sql - PullRequest
       4

удаление списка групп в sql

0 голосов
/ 07 сентября 2018

В моем запросе

SELECT  
    [Dt],
    [ItemRelation],
    [DocumentNum],
    [DocumentDate],
    [CalendarYear]
FROM
    [Action].[dbo].[testtable]

Эти столбцы группируются:

  [ItemRelation]
  [DocumentNum]
  [CalendarYear]

Любые группы, которые я должен удалить.

Так вот данные для запроса

DECLARE @LIST_ABOVE TABLE (ItemRelation NVARCHAR(10),
                           DocumentNum NVARCHAR(10),
                           CalendarYear INT)

INSERT INTO @LIST_ABOVE (ItemRelation, DocumentNum, CalendarYear)
VALUES
    (11511,5,2017),
    (11628,2,2017),
    (11661,163,2017),
    (11692,82,2017),
    (11709,143,2017),
    (13189,33,2017),
    (13284,2,2017),
    (158009,12,2017),
    (158121,63,2017),
    (11514,60,2017),
    (11628,3,2017),
    (11671,13,2017),
    (11706,8,2017),
    (11741,163,2017),
    (13191,7,2017),
    (13284,3,2017),
    (158010,12,2017),
    (158122,41,2017),
    (11592,33,2017),
    (11628,140,2017),
    (11683,70,2017),
    (11706,50,2017),
    (13163,70,2017),
    (13191,33,2017),
    (13322,4,2017),
    (158010,89,2017),
    (158122,62,2017),
    (11594,9,2017),
    (11633,75,2017),
    (11683,140,2017),
    (11706,51,2017),
    (13163,75,2017),
    (13250,83,2017),
    (13322,36,2017),
    (158010,95,2017),
    (158122,63,2017),
    (11623,71,2017),
    (11634,154,2017),
    (11683,154,2017),
    (11706,58,2017),
    (13163,131,2017),
    (13269,50,2017),
    (157186,57,2017),
    (158121,41,2017),
    (11626,29,2017),
    (11661,143,2017),
    (11683,163,2017),
    (11709,81,2017),
    (13189,13,2017),
    (13269,66,2017),
    (157192,56,2017),
    (158121,62,2017)

Когда я запускаю этот скрипт

DELETE T FROM [Action].[dbo].testtable T
WHERE EXISTS (SELECT 1 
              FROM @LIST_ABOVE 
              WHERE T.[ItemRelation] = [ItemRelation] 
                AND T.[DocumentNum] = [DocumentNum] 
                AND T.[CalendarYear] = [CalendarYear]);

из таблицы, строки с указанными выше группами не были удалены. в каждой группе 40 строк.

поэтому необходимо удалить 40 * 52 = 2080 строк.

Как удалить строки с этими группами?

Я просто не хочу делать это вручную. Но я не могу их удалить.

1 Ответ

0 голосов
/ 07 сентября 2018

Для начала вы объявили ItemRelation и DocumentNum как NVARCHAR (10), но вставили их как целые числа. Само по себе это не проблема, но если типы данных в testtable являются числовыми, то это может объяснить несоответствие типов данных.

DELETE T 
FROM [Action].[dbo].testtable AS T
INNER JOIN @LIST_ABOVE AS LA
ON LA.ItemRelation = T.ItemRelation
AND LA.DocumentNum = T.DocumentNum
AND LA.CalendarYear = T.CalendarYear

Если это не сработает, я бы посоветовал попытаться удалить первый элемент в @ LIST_ABOVE

DELETE FROM [Action].[dbo].testtable AS T
WHERE T.ItemRelation = 11511
AND T.DocumentNum = 5
AND T.CalendarYear = 2017

В конце вам нужно определить, почему не происходит удаление. Несоответствия типов данных кажутся наиболее вероятными, просто нет данных в [Action]. [Dbo] .testtable.

...