2013-12-23 4 views
0

Я пытаюсь повернуть строки в столбцы. У меня в основном есть много строк, где каждая N строк означает строку в таблице, которую я хотел бы перечислить как набор результатов. Я дам краткий пример:Динамический PIVOT с столбцами varchar

У меня есть структуру таблицы, как это:

Table structure

Имейте в виду, что я удалил много строк, чтобы упростить этот пример. Каждые 6 строк означает 1 строку в наборе результатов, которые я хотел бы быть похожим на это:

Desired output

  • Все столбцы являются VARCHAR типов (вот почему я не мог сделать это с шарниром)
  • Количество OS столбцы являются динамическими, так это количество строк в исходной таблицы
  • Логически Количество строк (строк таблицы в наборе результатов) одинаково динамический
+1

У вас возникла проблема с вашим дизайном (помимо того факта, что вам нужен динамический SQL). Что определяет, что «первое» значение «ОПИСАНИЕ» идет с «первым» значением «CODE», например?, Нет столбца, который поможет вам отдавать заказ строкам. Вы говорите: «каждые 6 строк означают 1 строку в наборе результатов», но у нас нет способа сгруппировать эти 6 строк вместе, нет такой вещи, как «естественный порядок» таблицы, нам нужен фактический порядок – Lamak

+0

Как я уже сказал, я удалил строки (а также столбцы), чтобы упростить мой пример. Мое приложение добавляет строки в таблицу на основе другой таблицы столбцов. Поэтому гарантировано, что у меня будет одна строка таблицы для каждых N строк в моем datatable. – Elarrat

ответ

0

Я действительно сделал это. Я написал SQL, пока ... делаю, основываясь на количестве столбцов, зарегистрированных для набора результатов. Таким образом, я мог бы написать динамическое предложение SQL для N столбцов на основе прочитанных значений. В конце я только что вставил набор результатов в таблицу temp и voi lá.

Спасибо в любом случае!

1

(Не совсем ответ, но я t's, что у меня есть.)

Это таблица имен/значений, справа? В вашем запросе потребуется что-то, что идентифицирует, какой «набор» строк связан друг с другом. Без чего-то подобного я не вижу, как можно писать запрос. Ключевым фактором является то, что вы никогда не должны предполагать, что данные будут возвращены из SQL (Server, по крайней мере) в любом конкретном порядке. Как данные хранятся внутри системы, но не всегда, определяет, как она возвращается, когда заказ не указан.

Другое соображение: что если (когда?) Строка отсутствует - скажем, у продукта 4 нет колонки B цены? Это нарушит правило «каждые шесть строк». «Начать новую строку с каждой новой строкой кода» было бы проблемой, если код был пропущен или когда (если нет) данные не возвращаются в ожидаемом порядке.

Если у вас есть какие-либо средства группировки предметов, сообщите нам об этом в обновленном вопросе, но в остальном я не считаю, что этот вопрос особенно разрешим.

+0

Общим ответом на такие вопросы является «нормализация ваших данных», создавая таблицу с (скажем) этими шестью столбцами. Увы, общий ответ на такие ответы: «Я не могу изменить структуру таблицы». Но, если вам нужно много работать с данными в форме «поворота», вам следует серьезно подумать об обновлении структуры таблицы. –

+0

Как сказано выше в моем комментарии, мое приложение добавляет строки, поэтому я могу доверять, что у меня всегда будет N строк данных для каждой строки в моем результирующем наборе. – Elarrat

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