Конференция "Базы" » Помогите с запросом
 
  • b.lutz (16.04.08 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 © (16.04.08 19:10) [1]
    А ты часом МССКЛ с Ораклом не спутал? :)
  • b.lutz (17.04.08 08:56) [2]
    не :)

    использую SQLServer2005_SSMSEE (Который бесплатный)

    яж говорю, в Server Management Studio запрос проходит, а через делфи нехочит :(
  • ЮЮ © (17.04.08 09:46) [3]
    ну так напиши без выпендрежа (без C и WITH)
  • ЮЮ © (17.04.08 09:49) [4]
    или PIVOT только с WITH работает?
    BOL по 2005-му под рукой нет :(
  • b.lutz (17.04.08 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 групп и их имён, а потом параметром передаю в ХП
  • ЮЮ © (18.04.08 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-предложения ?  :)
 
Конференция "Базы" » Помогите с запросом
Есть новые Нет новых   [134432   +19][b:0][p:0]