К вашему сведению - я действительно не был уверен, какое название дать на этот вопрос. Любое руководство приветствуется.
Ниже у меня есть «родительский» коврик (A12345), который в конечном итоге разрезается на 2 или более коврика. Эти коврики должны пройти тщательную стирку, и мне нужно знать, сколько стирок прошел этот коврик между коврами «Родитель» и «Ребенок».
Таким образом, в общей сложности у «A12345-678» было 4 стирки, прежде чем он был разрезан, и затем 3 стирки после того, как он стал отдельным.
Используя порядковый номер, я должен иметь возможность пометить процесс как 1-й, 2-й, 3-й и т. Д. Поскольку столбец Process_Num является желаемым столбцом, которого я пытаюсь достичь в SQL.
Rug_Num Sequence_Num Process Process_Num
A12345 10 Wash 1st Wash
A12345 11 Wash 2nd Wash
A12345 30 Wash 4th Wash
A12345 20 Wash 3rd Wash
'----Rug cut into 2 child rugs'
A12345-678 40 Wash 5th Wash
A12345-678 50 Wash 6th Wash
A12345-678 60 Wash 7th Wash
A12345-997 40 Wash 5th Wash
A12345-997 50 Wash 6th Wash
A12345-997 60 Wash 7th Wash
A12345-997 70 Wash 8th Wash
Вот мое утверждение «в процессе», но я не могу понять, как добавить что-то после «THEN», что заставит его последовательно нумеровать текущую последовательность как «1st, 2nd, 3rd». Мой разум говорит поставить еще один COUNT CASE WHEN
после 1-го THEN
, но тогда это будет бесконечное утверждение.
WITH toupdate AS (
SELECT m.*,
count(CASE WHEN (m.Process = 'Wash'
AND m.Rug_Num = m.Rug_Num
AND m.sequence_num < m.sequence_num)
THEN 1 ELSE 0 END)
OVER (PARTITION BY m.Process, m.Rug_Num, m.Process_Num) AS Process_Num_New
FROM mfng_data m
)
UPDATE toupdate
SET Process_Num = ISNULL(Process_Num_New,0);
Итак, выше я пытался скопировать COUNTIFS
(Excel) в SQL. Пример Excel ниже. Формула в столбце H:
=(COUNTIFS($C$3:$C$14,C3,$D$3:$D$14,"<"&D3,$E$3:$E$14,"Wash")+1)+IF(LEN(C3)>6,COUNTIFS($C$3:$C$14,$C$3,$E$3:$E$14,"Wash"),0)
Я добавляю +1, чтобы он считал, сколько было меньше текущей последовательности, и добавляю 1 для текущей последовательности.