У меня есть таблица с именем Documents
, в которой содержатся URL-адреса документов (чертежей), хранящихся на нашем сервере для каждого элемента в нашей системе.
Существует поле с именем PrintAsThumbnail
, которое является полем bit
, и оно сообщает системе, помещать ли изображение в какую-либо документацию. У нас может быть несколько документов, хранящихся в одной части. Если отмечен этот PrintAsThumbnail
более чем в одном документе, он переходит в расплавленное состояние и ничего не печатается.
То, что я хочу сделать, - это написать скрипт, который помечает ОДИН блок на элемент в соответствии со следующими приоритетами:
- Если
documentGroupFK
= 1, то это тот, который отмечендля элемента независимо. - В противном случае, если URL содержит
%.dxf%
, то этот флажок - В противном случае, если изображение является файлом изображения (обычно
.png
или jpg
или bmp
) тогда любой из них может быть отмечен галочкой - В противном случае, не ставьте галочку, поскольку есть вероятность, остальное будет
pdf
, и они все равно не будут отображаться.
У меня приблизительно 12900 различных предметов и около 15000 записей.
Я нашел в Google UPDATE или SELECT 1 запись для каждого элемента, и это указало мне на код ниже (credit @gbnна этом сайте) но я изо всех сил пытаюсь адаптировать его, чтобы получить то, что мне нужно.
;WITH cte AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ItemFK ORDER BY DocumentPK DESC) AS rn
FROM Document where SUM(PrintAsThumbnail) > 1
)
SELECT *
FROM cte
WHERE rn = 1
Я ожидаю, что для каждого элемента (itemFK
) будет установлен максимум ОДИН PrintAsThumbnail
в соответствии с приведенными выше правилами, поэтому наиболее значимая часть появляется в нашей документации. Я периодически запускаю этот сценарий, чтобы убедиться, что система обновлена.
Пример данных как есть
+--------+-----------------+-------+------------------+
| ItemFK | DocumentGroupFK | URL | PrintAsThumbnail |
+--------+-----------------+-------+------------------+
| 1 | 0 | %.dxf | 0 |
| 1 | 0 | %.pdf | 0 |
| 2 | 1 | %.jpg | 1 |
| 2 | 0 | %.pdf | 1 |
| 2 | 0 | %.dxf | 1 |
| 3 | 1 | %.dxf | 0 |
| 3 | 0 | %.pdf | 1 |
| 3 | 0 | %.bmp | 1 |
| | | | |
+--------+-----------------+-------+------------------+
Пример данных после запуска сценария обновления
+--------+-----------------+-------+------------------+
| ItemFK | DocumentGroupFK | URL | PrintAsThumbnail |
+--------+-----------------+-------+------------------+
| 1 | 0 | %.dxf | 1 |
| 1 | 0 | %.pdf | 0 |
| 2 | 1 | %.jpg | 1 |
| 2 | 0 | %.pdf | 0 |
| 2 | 0 | %.dxf | 0 |
| 3 | 1 | %.dxf | 1 |
| 3 | 0 | %.pdf | 0 |
| 3 | 0 | %.bmp | 0 |
| | | | |
+--------+-----------------+-------+------------------+
Обратите внимание, что на всех предметах отмечен ОДИН printAsThumbnail
. Элемент 1 имеет pdf
& .dxf
, поэтому правила предписывают ставить отметку .dxf
. У элемента 2 есть pdf
, изображение и dxf
, но правило приоритета 1 состоит в том, что если оно имеет documentGroupFK
, равное 1, то это то, что отмечено галочкой. Элемент 3 имеет то же значение, что и 2, но не назначен documentGroupFK
, поэтому в правилах указано, что в качестве отмеченного отмечен .dxf