Вопрос по T-SQL

2mmail2

Такая суть задачи:
Нужна хванимая процедура, возвращающая таблицу, в которой названия столбцов берутся из запроса по таблице (уникальные значения какого-то столбца). Вот тут то и возникла загвоздка, нигде не могу найти, как это сделать.

Helga87

тебя спасут динамические запросы. Типа такого
exec('select ' + @columnToSelect + ' from MyTable') 

2mmail2

А как это можно реализовать? А то в справке очень мало по этому поводу информации?

Helga87

Тогда чуть более подробно напиши, что тебе надо.

2mmail2

В общем - есть таблица накладных (клиент, товар, стоимость, дата, уникальный ID).
Нужно сделать из неё таблицу - Клиент, потом столбцы по каждому бренду, в которых значения суммы продаж клиенту по каждому бренду).

Helga87

Не понял. На примере покажи, пожалуйста.

6yrop

В новом SQL Sever 2005 для разворачивания таблиц введена конструкция PIVOT
http://msdn2.microsoft.com/ms177410.aspx
Но число столбцов там фиксировано Т.е. без динамического sql-я не обойтись.
А вообще, зачем такое нужно? обычно такие развороты делают сами репортеры.

2mmail2

Задача точно... Никак не могу родить решение, вернее - части его родил, но собрать воедино пока не получается
  В MS SQL Server хранится таблица Sales (продажи товаров клиентам) со
столбцами:
Id (int) - уникальный идентификатор записи
DateSale (DatTime) - дата продажи
Client (varchar) - имя клиента, которому осуществлена продажа
Brand (varchar) - бренд/марка товара, который был продан клиенту, например
"Calvin Klein" или "Cartier"
SumSale (decimal(18,2 - сумма на которую был продан товар
Примечание: таблица Sales - это по сути это строки накладных.
Необходимо написать Stored Procedure в MS SQL Server, которая в качестве
результата выдавала таблицу со следующими столбцами:
Client (varchar) - имя клиента
Brand1, Brand2 : BrandN (decimal(18,2 - сумма продаж по брендам/маркам
товаров
Total (decimal(18,2 - сумма продаж по клиенту
Последняя строка должна иметь в качестве имени клиента значение Total, а
столбцы Brand1, Brand2 : BrandN - это суммарные продажи по каждому
бренду/марке. Поле Total в последней строке - суммарные продажи по всем
клиентам и по всем брендам/маркам.
Строки в таблице, кроме последней строки, должны быть отсортированы по
убыванию по полю Total.
Столбцы Brand1, Brand2 : BrandN должны стоять в такой очередности, чтобы
значения продаж в последней строке убывали от столбца Brand1 к BrandN .
В качестве входящих параметров у процедуры будут параметры @DateFrom,
@DateTo -даты продаж (с какое - по какое которые надо включить в отчет.
Примечание: кол-во брендов/марок и клиентов заранее неизвестно.

6yrop

ты с какого факультета?

2mmail2

Сейчас я уже в другом ВУЗе второе высшее получаю... Вот и возникла задачка, что-то никак не получается

6yrop

что конкретно у тебя не получается?
если ты хочешь полное решение, то это $50

2mmail2

В прицнипе - отдельные части запроса я родить вполне могу, но вот как все это собрать в единую таблицу... Мне не нужно готовое решение, просто прошу подсказать - в какую сторону двигаться.

6yrop


но вот как все это собрать в единую таблицу...
Если ты собираешься в дальнейшем работать в IT, то почитай основы теории реляционнных БД,
если нет, то ... все равно почитай .
Мне не нужно готовое решение, просто прошу подсказать - в какую сторону двигаться.
собираешь название столбцов через запятую, потом выполняешь запрос через EXEC('...')

2mmail2

Да основы то я знаю... В прицнипе - я такую задачу бы решел в программе лучше, однако требуется - хранимой процедурой. Алгоритм я накидал, только вот не получается его пока в SQL описать.
Оставить комментарий
Имя или ник:
Комментарий: