![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сложный кросс таб отчет. Варианты реализации.
Kolan © (2008-04-20 13:58:00)Здравствуйте,
Задача следующая.
Дано
Есть программа она может проводить измерение. Измерение это некий заголовок (код, дата, итд) и набор параметров.
Данные об измерении храняться в БД так:
Таблица «Измерения»
КодИзмерения
Другие параметры
Таблица «Справочник параметров»
КодПараметра
Название
Таблица «Параметры»
КодИзмерения
КодПараметра
Значение
Так вот пользователю все это дело надо вывести в одну строку. Проблемма, еще в том, что с разными измерениями может быть связано разное кол-во параметров.
Пример:
В БД:
Таблица «Измерения»
КодИзмерения Другие параметры
1
2
Таблица «Справочник параметров»
КодПараметра Название
1 R
2 L
3 C
Таблица «Параметры»
КодИзмерения КодПараметра Значение
1 1 10
1 2 20
1 3 30
2 1 11
2 2 22
А вот что должен увидеть пользователь
КодИзмерения R L C
1 10 20 30
2 11 22
Вопрос: Как можно реализовать сабж?
У меня есть варианты (я даже уже похожую ветку создавал ), но они не совсем годяться, поэтому я их не привожу.
ЗЫ
Можно менять что угодно, схему БД напирмер.
Kolan (2008-04-21 10:19:00) [1]Получилось так:
SELECT
A.MeasurmentID, A.DeviceID, A.OperationName,
SUM(CASE A.ParamID WHEN 1 THEN A.ParamValue ELSE 0 END) AS Rd,
SUM(CASE A.ParamID WHEN 2 THEN A.ParamValue ELSE 0 END) AS Cd,
SUM(CASE A.ParamID WHEN 3 THEN A.ParamValue ELSE 0 END) AS Ld,
SUM(CASE A.ParamID WHEN 4 THEN A.ParamValue ELSE 0 END) AS Cs,
A.MeasurmentDateTime, A.Note
FROM
(SELECT
Measurments.MeasurmentID, Measurments.DeviceID,
Measurments.OperationID, Operations.OperationName,
Params.ParamID, ParamsDictionary.ParamName, Params.ParamValue,
Measurments.MeasurmentDateTime, Measurments.Note
FROM Measurments, Operations, Params, ParamsDictionary
WHERE
(Measurments.MeasurmentID = Params.MeasurmentID)
AND (Measurments.OperationID = Operations.OperationID)
AND (Params.ParamID = ParamsDictionary.ParamID))
AS A
GROUP BY
A.MeasurmentID, A.DeviceID, A.OperationName, A.MeasurmentDateTime, A.Note
АSUM(CASE A.ParamID WHEN 4 THEN A.ParamValue ELSE 0 END) AS Cs,я наверно буду на клиенте генерить динамически
Нормально получилось?
Kolan (2008-04-21 09:52:00) [2]> BOL pivot table
SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year
GO
Так примерно я и хотел сделать (У меня есть варианты, но они не совсем годяться © [0]), но совсем понятно было как такое сделать в даной ситуации.
То есть я делаю нужный джоин, а затем дин. SELECT. Так?
sniknik (2008-04-20 23:17:00) [3]> MS SQL Server 2000
BOL - pivot table
Kolan (2008-04-20 23:05:00) [4]> вкладки Decision Cube
А как компоненты называются? Мож переехали в другую вкладку
Kolan (2008-04-20 23:02:00) [5]> А СУБД какая ?
MS SQL Server 2000
Сергей М, (2008-04-20 22:16:00) [6]
> В BDS такой не наблюдается, где искать?
Понятия не имею.
В 7-ке пакет стандартно имеется.
А СУБД какая ?
Kolan (2008-04-20 22:00:00) [7]> Компоненты со вкладки Decision Cube ты, надо понимать, уже
> разглядывал в лупу ?
Нет, не слашал о такой, потому и спрашивал
ЗЫ
В BDS такой не наблюдается, где искать? Или это что-то нестандартное?
Сергей М, (2008-04-20 18:36:00) [8]Ничего особо сложного пока не просматривается.
Компоненты со вкладки Decision Cube ты, надо понимать, уже разглядывал в лупу ?