Интересная цитата
Это что-то вроде PIVOT бедняка
Я знаю, что оператор PIVOT - это новая одежда императора поверх множества операторов CASE,На самом деле, так выглядит план запроса.Таким образом, существует более одного способа посмотреть на это.
Использование Мартином LEFT (, length) - это сокращение для выполнения преобразования в конкретную длину, поскольку LEFT (и RIGHT) неявно преобразует первый аргумент. Существует один случай, когда он не будет работать, для CONVERT (varchar, date, 101), который является конкретным форматом.
DATALENGTH (CONVERT (X))* 1 или 0)
Возможно, это была попытка изменить размер результирующих столбцов на основе максимальной длины столбцов, но, очевидно, это неправильный код (если это цель).
MAX(CASE index WHEN 123 THEN [Value] ELSE NULL)
Выглядит намного лучше.«index» - это ключевое слово, поэтому, если вы скопировали свой фрагмент из рабочего кода, я был бы удивлен.Может быть, это работает в 2000 году?Несколько советов:
- скобки вокруг "индекса"
- пропущенного "конца" для дела
- пропущенного CONVERT (данные не похожи на varchar, поэтому вам нужнодля преобразования)
оригинал возвращает '' не NULL, если он не равен 123
MAX (CASE [индекс] КОГДА 123 ТОГДА КОНВЕРТ (varchar (100), [Value],101) ELSE '' END)
(я добавил 101 для [value], чтобы соответствовать формату даты. Это не влияет на числовые значения)