Форум: "Базы";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
ВнизПомогите с запросом Найти похожие ветки
← →
b.lutz (2008-04-16 18:34) [0]есть 2 таблицы
Проекты (Описание некого проекта)
CREATE TABLE [dbo].[project](
[id] [int] NOT NULL,
[priority] [int] NOT NULL,
[name] [varchar](255) NOT NULL,
[sdate] [datetime] NOT NULL,
[fdate] [datetime] NOT NULL,
[GIP] [int] NULL,
CONSTRAINT [PK_project] PRIMARY KEY CLUSTERED
и
Перекрёстная таблица "Проекты-группы" (Какие группы учавствуют в каком проекте и каков соотв. статус участия)
CREATE TABLE [dbo].[group_project](
[id_project] [int] NOT NULL,
[id_group] [int] NOT NULL,
[id_status] [int] NOT NULL,
[last_event_id] [int] NULL,
CONSTRAINT [PK_group_project] PRIMARY KEY CLUSTERED
Исп. MSSQL и Delphi(BDS 2006)
dbGO (он же ADO)
подскажите почему не проходит запрос в TADODataSet (ругается на WITH):
WITH C (id_project, name, id_group, id_status) AS
(SELECT id_project, name, id_group, id_status FROM
group_project INNER JOIN project ON project.id=group_project.id_project)
SELECT id_project, name, [1] AS [209], [2] AS [212], [3] AS [220] FROM C
PIVOT (SUM(id_status) FOR [id_group] IN ([1], [2], [3])) AS PVT
в MSSQL Server Management Studio всё работает.
← →
Johnmen © (2008-04-16 19:10) [1]А ты часом МССКЛ с Ораклом не спутал? :)
← →
b.lutz (2008-04-17 08:56) [2]не :)
использую SQLServer2005_SSMSEE (Который бесплатный)
яж говорю, в Server Management Studio запрос проходит, а через делфи нехочит :(
← →
ЮЮ © (2008-04-17 09:46) [3]ну так напиши без выпендрежа (без C и WITH)
← →
ЮЮ © (2008-04-17 09:49) [4]или PIVOT только с WITH работает?
BOL по 2005-му под рукой нет :(
← →
b.lutz (2008-04-17 11:50) [5]Работать то работает, только из-за того что в таблице есть поле
[last_event_id] [int] NULL
и в ситуации когда они в разных записях отличаются, то получается не совсем тот PIVOT что хотелось бы, т.е. получается не так как мне нужно, а вот так:
как надо:
проект название 209 212 220
312 Имя1 1 2 3
132 Имя2 2 NULL 1
........
........
а получается вот так (без WITH):
проект название 209 212 220
312 Имя1 1 NULL NULL
312 Имя1 NULL 2 NULL
312 Имя1 NULL NULL 3
132 Имя2 2 NULL 1
........
........
А так в общем разобрался, использовал ХП с параметрами
если кому надо:
ALTER PROCEDURE [dbo].[show_PVT]
@pFieldsName varchar(500),
@pFields varchar(100)
AS
DECLARE
@select VARCHAR(1000)
BEGIN
SET @select="WITH C (id_project, name, id_group, id_status) AS
(SELECT id_project, name, id_group, id_status FROM
group_project INNER JOIN project ON project.id=group_project.id_project)
SELECT id_project, name, "+@pFieldsName+" FROM C PIVOT (SUM(id_status) FOR [id_group] IN ("+@pFields+")) AS PVT"
EXEC(@select)
В делфе получаю список id групп и их имён, а потом параметром передаю в ХП
← →
ЮЮ © (2008-04-18 03:06) [6]> Работать то работает, только из-за того что в таблице есть
> поле
> [last_event_id] [int] NULL
а откуда это поле вдруг выплывет, если его нет в выборке?
Я имел в виду
SELECT
id_project, name, [1] AS [209], [2] AS [212], [3] AS [220]
FROM
(
SELECT
id_project, name, id_group, id_status
FROM
group_project
JOIN project ON project.id=group_project.id_project
) С
PIVOT (SUM(id_status) FOR [id_group] IN ([1], [2], [3])) AS PVT
>
> EXEC(@select)
не боишься, что твою процедуру заюзают с параметром
"bla-bla-bla DELETE * FROM project bla-bla-bla1",
где bla-bla-bla и bla-bla-bla1 обеспечат синтаксисески верные SQL-предложения ? :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.11.02;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c