2015-08-18 13 views
0

Первоначальная публикация так простите меня, если это было задано раньше.
Я не новичок в написании SQL, но я также не эксперт.SQL Server - множественный SUM CASE WHEN

мне нужен лучший способ, чтобы написать это:

CASE 
WHEN OrderQuantity + Week1Quantity >= CriteriaAmount THEN 1 
WHEN OrderQuantity + Week1Quantity + Week2Quantity >= CriteriaAmount THEN 2 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity >= CriteriaAmount THEN 3 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity >= CriteriaAmount THEN 4 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity >= CriteriaAmount THEN 5 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity >= CriteriaAmount THEN 6 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity + Week7Quantity > CriteriaAmount THEN 7 
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity + Week7Quantity + Week8Quantity >= CriteriaAmount THEN 8 
ELSE 999 
END 

Его цель заключается, чтобы найти первую стадию, на которой цель достигнута, используя числовые значения из каждого столбца как нарастающий итог.

Таблица так:

Количество заказа неделя 1 Неделя 2 Неделя 3 (Предложил Target)
......... 5 ... ......... ..... 5 ...... ..... 5 ...... ..... 5 ..... . ............ 15 ............
........ 10 .......... . .... 10 ..... .... 10 ..... .... 10 ..... ........... .500 ...........

В приведенной выше таблице строка 1 даст ответ 2, поскольку для достижения цели требуется 2 недели.
Строка 2 приземлится на инструкцию ELSE, дающую 999, которая позже будет преобразована в ошибку.

Мне хотелось бы, чтобы это было лучше, поскольку у меня есть еще 52 столбца, чтобы пройти через вас, вы можете себе представить, что это свист белого пространства!

Спасибо, Адам

ответ

0

Конструкция стола очень плохо. Через несколько лет он будет иметь сотни столбцов. Единственный способ справиться с этим, если вы не можете изменить дизайн таблицы, - использовать динамический sql с exec.

Здравый и поддерживаемый подход состоит в том, чтобы изменить дизайн таблицы, чтобы иметь одну строку для каждого номера позиции, номера недели и количества предметов. Затем вы можете использовать стандартные TSQL-глаголы, такие как sum и group by.

+0

Дизайн стола ограничен 52 колонками - количество недель в году. Произнесите начальную сумму заказа на 1 бар. В основном это вычисление того, сколько марсовых баров будет вписываться в поле, предлагаемая цель - размер коробки. Предостережение заключается в том, что он должен работать для разных предметов размера, например, для twixs. Таким образом, я уже рассчитал комбинированный размер барсов и твинов на каждую неделю, теперь мне нужно как можно ближе подойти к этой сумме, чтобы не тратить в коробке свободное место. –

+0

Даже с «единственными» 52 повторяющимися столбцами будет очень сложно писать инструкции sql против такой таблицы. Таблица сервера sql не является Excel. Если вы можете изменить дизайн стола сейчас, или вам придется использовать действительно обширные обходные пути каждый раз, когда вы используете эту таблицу. –

+0

Вы можете предложить дизайн стола? Я не уверен, что понимаю. –

Смежные вопросы