Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2012, 22:18   #1
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию MS SQL SERVER 2005 sql querry

Здравствуйте все все все у меня вопрос к вам связанный с sql запросом
у меня есть две таблицы D и P таблица D- мастер А P детальная связь реализована по двум полям D.Код=P.Pkey отношение один ко многим вот.
короче мне из двух таблиц нужно получить таблицу с одним столбцом (полем) а результаты в нем должны быть вот какие сначала идет строка из поля 'Договор' потом ниже него под ним идут строки из таблицы P 'Наименование' то есть как вы поняли из отношения следует что к одному договору (строке) относится несколько строк с наименованием (отношение один ко многим) поэтому в таблице должно получиться с начало договор потом несколько строк с наименованием потом опять но уже следующая строка из таблицы D то есть следующий договор а за ним следующие строки с наименованием из таблицы P и так далее . вот а как это сделать с помощью sql в Managment Studio я не знаю вот. Подскажите пожалуйста ну или хотя бы намекните ??
Изображения
Тип файла: jpg D.jpg (98.5 Кб, 151 просмотров)
Тип файла: jpg P.jpg (104.8 Кб, 116 просмотров)
reihtmonbern вне форума Ответить с цитированием
Старый 19.08.2012, 22:34   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

можно использовать компонент TDBGridEh из набора EhLib . Последние версии это умеют ... правда прийдется повозиться с запросами и настройками (там это делается через TMemTableEh)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 19.08.2012, 23:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
reihtmonbern
Ты хочешь на экране получить вид групп, или не знаешь как это запросом описать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2012, 16:10   #4
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты хочешь на экране получить вид групп, или не знаешь как это запросом описать?
Да так точно я не знаю как запрос сделать я так понимаю что тут придется подзапрос воять или чё та ещё короче мне просто нужен совет по sql
reihtmonbern вне форума Ответить с цитированием
Старый 20.08.2012, 19:10   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
просто нужен совет
У твоей MS Manager есть построитель запросов.
Открой его добавь в него две таблицы, перетащи из одной поле ключа на другую в то место, с которым это поле будет связано, укажи какие поля выводить и получишь запрос.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2012, 21:47   #6
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
У твоей MS Manager есть построитель запросов.
Открой его добавь в него две таблицы, перетащи из одной поле ключа на другую в то место, с которым это поле будет связано, укажи какие поля выводить и получишь запрос.
чета не помог мне построитель запросов он там примитивный как в аксэсе напишите пожалуйста хотя бы примерный sql запрос ??
reihtmonbern вне форума Ответить с цитированием
Старый 22.08.2012, 22:05   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
он там примитивный
Код:
select
 d.[Договор],p.[Наименование]
join p on D.Код=P.Pkey
А в продвинутых Дельфийских гридах указывай поле Договор для группировки, а Наименование как деталь группы.
Если грид поддерживает группировку (типа DevGrid или EhGrid) то получишь на экране что-то на подобие многоэтажки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.08.2012, 20:28   #8
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
select
 d.[Договор],p.[Наименование]
join p on D.Код=P.Pkey
А в продвинутых Дельфийских гридах указывай поле Договор для группировки, а Наименование как деталь группы.
Если грид поддерживает группировку (типа DevGrid или EhGrid) то получишь на экране что-то на подобие многоэтажки.
Твой запрос вообще не работает выдает ошибку я его изменил (на скриншоте) и я на рисунке показал нарисовал что я хочу получить может ты мне подскажешь как надо правильно sql запрос написать чтобы получить таблицу которую я нарисовал ???

А в продвинутых Дельфийских гридах указывай поле Договор для группировки, а Наименование как деталь группы.
Если грид поддерживает группировку (типа DevGrid или EhGrid) то получишь на экране что-то на подобие многоэтажки.[/QUOTE]

а чё это за компоненты такие скинь исходничек хоть самый простенький (типа DevGrid или EhGrid)
Изображения
Тип файла: jpg ЖДОИН.jpg (129.8 Кб, 151 просмотров)

Последний раз редактировалось Stilet; 23.08.2012 в 22:05.
reihtmonbern вне форума Ответить с цитированием
Старый 23.08.2012, 22:35   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ты не понимаешь саму суть задачи.
Ты хочешь заставить источник данных формировать визуальный вид, в то время когда ему этого делать не полагается никак
Данные не обязательно строить в запросе так как ты их видишь на экране. Группировать же уже обязан компонент-отображатель, но ему совсем не обязательно скармливать именно так как ты проиллюстрировал.
Более того - многие гриды, способные группировать данные подавятся твоей реализацией именно потому что ты требуешь у него групировку по критерию, но этого критерия не даешь.
Как раз в твоем случае делают именно два поля
Первое ключевое для группы (имя группы, код или еще что-то, что способно объединять записи), и второе поле, которое содержит данные, принадлежащие группе, указанной в первом поле.

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

Код:
CREATE FUNCTION foo()
RETURNS 
@res TABLE 
(
	[Договор] nvarchar(max)
)
AS
BEGIN

DECLARE cur CURSOR select d.[Договор],p.[Наименование] from D join p on D.Код=P.Pkey
DECLARE @Договор  nvarchar(max)
DECLARE @Договор1  nvarchar(max)
DECLARE @Наименование  nvarchar(max)

OPEN cur ;
FETCH NEXT FROM cur into @Договор,@Наименование;
WHILE @@FETCH_STATUS = 0   BEGIN
  if @Договор<>@Договор1 then
   insert into @res  values @Договор
   set @Договор1=@Договор
  else
   insert into @res @Наименование
  end if
  FETCH NEXT FROM cur into @Договор,@Наименование;
END;
	RETURN cur;
END
Наработку писал с потолка, так что ее не копипастить нужно а опробывать и вникнуть в то, как она работает или что еще лучше не заниматься глупостями.

P.S. Чуть не забыл. Уверен что ты не догадаешься что вызывать нужно так:
Код:
select * from foo()
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.08.2012, 22:47   #10
reihtmonbern
Форумчанин
 
Регистрация: 08.01.2011
Сообщений: 102
По умолчанию Супер

Слушай спасибо тебе огромное за процедуру нет слов я бы сам не придумал бы обязательно постараюсь в ней разобраться . Но может ты и прав пусть будет два столбца только тогда подскажи мне как луче сделать так что бы : как ты видишь из рисунка там просто в поле договор идут повторения ну название договора повторяются ты не знаешь как просто удалить эти повторяющиеся названия ну просто чтобы оставалось одно название договора потом пустые ячейки на против группы к этому договору а потом уже следующий договор и так далее .?!
reihtmonbern вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS SQL SERVER 2005 reihtmonbern БД в Delphi 6 31.07.2012 16:57
база ms sql server 2005 zazic2p SQL, базы данных 0 05.10.2011 17:31
MS SQL 2005 Server регистрозависимым Cawboy БД в Delphi 0 26.03.2010 15:45
Вставка БД с SQL server 2005 фЁдОр SQL, базы данных 17 20.11.2007 17:15