![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с запросом
b.lutz © (2008-04-16 18:34:00)есть 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 всё работает.
ЮЮ (2008-04-18 03:06:00) [1]> Работать то работает, только из-за того что в таблице есть
> поле
> [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-предложения ? :)
b.lutz (2008-04-17 11:50:00) [2]Работать то работает, только из-за того что в таблице есть поле
[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-17 09:49:00) [3]или PIVOT только с WITH работает?
BOL по 2005-му под рукой нет :(
ЮЮ (2008-04-17 09:46:00) [4]ну так напиши без выпендрежа (без C и WITH)
b.lutz (2008-04-17 08:56:00) [5]не :)
использую SQLServer2005_SSMSEE (Который бесплатный)
яж говорю, в Server Management Studio запрос проходит, а через делфи нехочит :(
Johnmen (2008-04-16 19:10:00) [6]А ты часом МССКЛ с Ораклом не спутал? :)