Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / [игнор отключен] [закрыт для гостей] / Помогите составить запрос с объединением / 18 сообщений из 18, страница 1 из 1
12.05.2011, 11:18
    #37256544
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Есть две таблицы: а - с датами, фио; b - с датами изменения значений, ФИО и с самими значениями. Необходимо составить запрос, чтобы получить таблицу как на рисунке, прикрепленном к сообщению. Пыталась делать левым соединением с разными условиями, но не получается.
...
Рейтинг: 0 / 0
12.05.2011, 11:35
    #37256583
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisa,

Код: plaintext
1.
2.
SELECT t1.date,t1.fio,t2.value 
FROM table1 t1 left 
        JOIN table2 t2 ON t1.fio=t2.fio AND t2.date<=t1.date
...
Рейтинг: 0 / 0
12.05.2011, 11:48
    #37256620
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
WarAnt, к сожалению, приведенный вами запрос, я уже пробовала. Он не выдает нужный результат.
...
Рейтинг: 0 / 0
12.05.2011, 11:50
    #37256628
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Нумеруте своих Ивановых, Зиновьевых и прочих согласно возрастанию даты. А потом уже соединяете результаты по полученному номеру и имени
...
Рейтинг: 0 / 0
12.05.2011, 12:38
    #37256748
Владимир СА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Извиняюсь конечно, но вообще-то делают отдельный справочник по ФИО. Ну и тогда соединение по Id-ам.
...
Рейтинг: 0 / 0
12.05.2011, 12:46
    #37256770
iljy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisa,

Код: plaintext
1.
SELECT t1.date,t1.fio,(select top  1  t2.value from table2 t2 where t2.fio = t1.fio and t2.date<=t1.date order by t2.date desc)
FROM table1 t1
...
Рейтинг: 0 / 0
12.05.2011, 13:27
    #37256874
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Владимир СА,
данные две исходные таблицы - результаты других запросов.

iljy,
благодарю!
...
Рейтинг: 0 / 0
13.05.2011, 06:04
    #37258214
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
А как все-таки сделать запросом с соединением? Не очень поняла метод, предложенный Glory.
...
Рейтинг: 0 / 0
13.05.2011, 06:40
    #37258220
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisaА как все-таки сделать запросом с соединением? Не очень поняла метод, предложенный Glory.
Ну... ежели ты объяснишь по какому принцЫпу получена ПЕРВАЯ строка Результата... то можно и соединением.
...
Рейтинг: 0 / 0
13.05.2011, 09:02
    #37258250
iljy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisaА как все-таки сделать запросом с соединением? Не очень поняла метод, предложенный Glory.
А зачем? Ну вот так можно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SELECT t1.date,t1.fio,t2.value 
FROM table1 t1 left JOIN table2 t2 ON t1.fio=t2.fio AND
			t2.date=(select top  1  t3.date from table2 t3
					 where t3.date <= t1.date and t3.fio = t1.fio order by t3.date desc)
					 
SELECT t1.date,t1.fio,
	substring(max(convert(char( 8 ), t2.date,  112 ) + cast(t2.value as varchar)), 9 , 8000 )
FROM table1 t1 left JOIN table2 t2 ON t1.fio=t2.fio AND t2.date <= t1.date
group by t1.date, t1.fio


select t2.*
from(
	SELECT t1.date,t1.fio, max(t2.date) d2
	FROM table1 t1 left JOIN table2 t2 ON t1.fio=t2.fio AND t2.date <= t1.date
	group by t1.date, t1.fio
)t join table2 t2 on t2.fio = t.fio and t2.date = t.date
...
Рейтинг: 0 / 0
13.05.2011, 10:29
    #37258429
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
iljy, на самом деле запрос нужен не только для sql server, но и под аналогичную ситуацию для 1С:Предприятие 8. А 1с не принимает в качестве поля выборки вложенный запрос. Третий запрос, из приведенных Вами, подходит, но возвращает пустой результат. Попробую его на sql server'е выполнить и проверить что он выдаст.
...
Рейтинг: 0 / 0
13.05.2011, 10:35
    #37258456
linke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisa,

Все он там понимает. только по 1с форум другой.
...
Рейтинг: 0 / 0
13.05.2011, 11:22
    #37258632
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
linke,
повторюсь, 1с не принимает в качестве поля выборки вложенный запрос. Да, я понимаю, что по сути - вопрос не в тему. Но язык запросов 1с аналогичен языку запросов sql.

iljy ,
проверила на sql server'е третий запрос, он выдает только строку 02-03-2011 Иванов 1000. Может быть в нем ошибка? Посмотрите, пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
select t2.*
from(
	SELECT t1.date,t1.fio, max(t2.date) d2
	FROM table1 t1 left JOIN table2 t2 ON t1.fio=t2.fio AND t2.date <= t1.date
	group by t1.date, t1.fio
)t join table2 t2 on t2.fio = t.fio and t2.date = t.date

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
13.05.2011, 13:26
    #37258976
linke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisalinke,
повторюсь, 1с не принимает в качестве поля выборки вложенный запрос. Да, я понимаю, что по сути - вопрос не в тему. Но язык запросов 1с аналогичен языку запросов sql.



Мне вот интересно где он не понимает, пример можно?
...
Рейтинг: 0 / 0
13.05.2011, 14:13
    #37259130
s.vasilisa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
linke,

SELECT t1.a a, t2.b b, (SELECT...) c
FROM t1
Вложенный запрос 1с в поле выборки у 1с не пройдет, инфа 100%
...
Рейтинг: 0 / 0
13.05.2011, 14:28
    #37259184
linke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
s.vasilisa,

Тогда как вариант через временные таблицы, или вариант предложенный iljy
...
Рейтинг: 0 / 0
13.05.2011, 14:34
    #37259206
narval
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Что то у меня одним селектом тоже не очень получается. Двумя конечно, вроде того:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ВЫБРАТЬ
	tbl1.FIO КАК FIO,
	tbl2.value,
	tbl1.Date КАК Date,
	ЕСТЬNULL(tbl2.Date, ДАТАВРЕМЯ( 2100 ,  1 ,  1 )) КАК Date1
ПОМЕСТИТЬ Темп1
ИЗ  tbl1 КАК tbl1 ЛЕВОЕ СОЕДИНЕНИЕ tbl2 КАК tbl2
	ПО tbl1.FIO = tbl2.FIO И tbl1.Date >= tbl2.Date
;
ВЫБРАТЬ Темп1.FIO, Темп1.value, Темп1.Date
ИЗ  Темп1 КАК Темп1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ 
		(ВЫБРАТЬ
			Темп1.FIO КАК FIO,
			Темп1.Date КАК Date,
			МАКСИМУМ(Темп1.Date1) КАК Date1
		ИЗ  Темп1 КАК Темп1
		СГРУППИРОВАТЬ ПО Темп1.FIO, Темп1.Date) КАК Темп2
		ПО Темп1.FIO = Темп2.FIO
			И Темп1.Date = Темп2.Date
			И Темп1.Date1 = Темп2.Date1
...
Рейтинг: 0 / 0
14.05.2011, 09:01
    #37260403
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос с объединением
Одним запросом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
ВЫБРАТЬ
	Таб1.Data,
	Таб1.ФИО,
	Таб2.Value
ИЗ
	Справочник.Table1 КАК Таб1 ЛЕВОЕ СОЕДИНЕНИЕ
	
	( ВЫБРАТЬ	
		Таблица1.Data КАК Дата1,
		Таблица1.ФИО КАК ФИО,
		МАКСИМУМ(Таблица2.Data) КАК Дата2
	ИЗ
		Справочник.Table1 КАК Таблица1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ
		Справочник.Table2 КАК Таблица2
			ПО Таблица1.ФИО = Таблица2.ФИО И Таблица1.Data >= Таблица2.Data
		СГРУППИРОВАТЬ ПО Таблица1.ФИО, Таблица1.Data ) КАК Промежут
	ПО Таб1.ФИО = Промежут.ФИО И Таб1.Data = Промежут.Дата1
	
	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Table2 КАК Таб2
	ПО Промежут.ФИО = Таб2.ФИО И Промежут.Дата2 = Таб2.Data
...
Рейтинг: 0 / 0
Форумы / [игнор отключен] [закрыт для гостей] / Помогите составить запрос с объединением / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]