2010-06-23 2 views
0

Я вернулся с другим (возможно) глупым вопросом. Прости.Вставьте значения из одной таблицы в другую таблицу с другой конструкцией в sql-сервере

У меня довольно сложный запрос, который объединяет 4 таблицы и вычисляет сумму столбца на основе двух других столбцов в двух таблицах. результат возвращается, как это:

Image http://eternalvinay.iocleicester.com/blahblah.png

Теперь я хочу, чтобы результаты были как с правой стороны изображения. число строк в месяц/год может изменить, хотя его 4 на данный момент.

Я создаю временную таблицу:
Объявить @TmpTable (идентификатор ИНТ идентичности, AnsSum поплавка, AnsMonth INT, AnsYear целое)
для хранения значений от изображения -> table1. Однако я не могу понять, как преобразовать эти строки в формат, необходимый в таблице 2.

Итак, любые намеки на это, пожалуйста? Большое спасибо.

ps: Я попытался ответить на другие вопросы, связанные с Google, и вам не повезло.
pss: Я тоже не ожидаю точного ответа, мне очень интересно узнать новые вещи, поэтому, если вы знаете, где я могу научиться это делать, толкание в правильном направлении, это тоже было бы здорово!

ответ

2

Вы можете использовать cross apply для получения всех значений в формате с разделителями-запятыми в одном столбце. вместо «4» разных столбцов. Проблема в том, что этот «4» не может определяться каждый раз. он может увеличиваться или уменьшаться, и это не рекомендуется иметь в качестве столбцов.

SELECT DISTINCT AnaMonth, anayear, [DerivedColumn] ОТ @TmpTable CROSS APPLY ( ВЫБОР AnaSum + '' ОТ @TmpTable B ГДЕ A.AnaMonth = B.AnaMonth И A.AnaYear = В. AnaYear FOR XML PATH ('') ) AS C (DerivedColumn)

вы получите [6,0000, 1,000, 8,0000, 5,0000] в одной колонке месяц 5 и год 2010 и т.д ... Вы можете использовать это как таблицу для запроса в течение определенного месяца.

Надеюсь, что это поможет

+0

Aweeesome! это работало как шарм !! ты гений! большое спасибо! – iamserious

0

Итак, у вас есть нормализованные данные, и вы хотите повернуть результирующий набор, чтобы создать repeating groups.

Вы можете использовать PIVOT, но для определения четырех столбцов вам понадобится другой атрибут в базовой таблице.

Я бы порекомендовал не задать этот запрос в SQL. Просто выполните запрос к базе данных и получите четыре строки в месяц/год. Затем напишите код в своем приложении, чтобы агрегировать результаты по месяцам/годам.

+0

Хм! интересно, я смотрю на PIVOT прямо сейчас, похоже, что он может справиться с этой задачей, но мне любопытно, почему вы предлагаете использовать этот язык программирования для этого? также, результаты в таблице уже агрегированы. поэтому мне не нужно снова использовать агрегат, просто преобразуйте их в разные столбцы в месяц/год! – iamserious

+1

Pivot не может выполнить эту работу, потому что у вас нет атрибута в вашей базовой таблице, чтобы определить столбцы точки поворота.Другими словами, как вы можете определить стержень, для которого строка попадает в каждый соответствующий столбец? –

+0

Спасибо за объяснение, похоже, что я неправильно понял стержень! – iamserious

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