Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по MS Query / 13 сообщений из 13, страница 1 из 1
05.12.2005, 11:26:33
    #33416643
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Подозреваю что вопрос элементарный, но что-то не могу сообразить.
Надо сделать отчет в XL путем получения данных из MS SQL через query.
В БД есть поле - содержит дату действия (и соответсвенно остатка, если говорить про фин. показатели) по счету.
Надо что бы в отчет вытягивались данные за последнюю дату изменения по счету.
Грубо говоря

счет дата изменения остаток
1 01/01/2005 -2
1 31/01/2005 58
1 01/06/2005 20
1 31/10/2005 11
1 01/11/2005 5

Мне нужно что бы в отчет попадали данные только за 01/11/2005

Как сделать?
...
Рейтинг: 0 / 0
05.12.2005, 12:04:40
    #33416780
Вопрос по MS Query
И в чем проблема?

Данные -> внешние данные -> создать запрос. И в окне MS Query указываешь условие.

Либо так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    With ActiveSheet.QueryTables.Add(Connection:= _
      "ODBC;DSN=База данных MS Access;" _
      & "DBQ=D:\1\db1.mdb;" _
      & "DefaultDir=D:\1;" _
      & "DriverId=25;FIL=MS Access;MaxBufferSize=2048;" _
      & "PageTimeout=5;UID=admin;", Destination:=Range("G10"))
        .CommandType = xlCmdSql
        .CommandText = "SELECT счет, [дата изменения], остаток " _
          & "FROM НазваниеТаблицы " _
          & "WHERE [дата изменения] = #11/1/2005#"
        .Refresh BackgroundQuery:=False
    End With
...
Рейтинг: 0 / 0
05.12.2005, 12:10:04
    #33416797
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Не совсем так.
Если бы я знал ТОЧНУЮ дату на какую было изменение по счету - безусловно условие выбора по дате было бы супер.
НО. Есть куча счетов. Для каждого счета есть куча изменений на разные даты.
При чем для одного счета дата последнего изменения может быть текущей, а для другого - недельной давности.
Вопрос как выбрать дату _последнего_ изменения счета. (сооствеетственно последнее изменение может быть хоть год назад).
...
Рейтинг: 0 / 0
05.12.2005, 12:13:20
    #33416810
5631
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Надо в MS Query подредактировать текст запроса. По всем полям , кроме даты, должна быть группировка, а перед названием поля даты- слово Max. Это будет выборка за посдеднюю дату. Кроме Max , есть другие варианты. Если так не умеешь , используй фильтр в сводной таблице.
...
Рейтинг: 0 / 0
05.12.2005, 12:18:58
    #33416837
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
5631Надо в MS Query подредактировать текст запроса. По всем полям , кроме даты, должна быть группировка, а перед названием поля даты- слово Max. Это будет выборка за посдеднюю дату. Кроме Max , есть другие варианты. Если так не умеешь , используй фильтр в сводной таблице.

В XL не могу данные вытащить просто из-за того, что их больше 65000 строк. Он их стянуть не может.

А вот про первый вариант с запросом - чуть подробнее можно. я с Query столкнулся несоколько дней назад, это не моя работа, это скорее факультатив. ;)
...
Рейтинг: 0 / 0
05.12.2005, 12:33:48
    #33416897
5631
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Каким образом ты , вообще, вытягиваешь данные с сервера?
...
Рейтинг: 0 / 0
05.12.2005, 12:41:31
    #33416939
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Через Query.
Создаю там запрос. Выбираю нужные групировки.
Получился вот такой сиквел-запрос.


SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Date_Carry, RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))

Соответственно поле, где храниться информация по дате проводок
RestDate.Date_Carry

Вот из него необходимо выбирать максимальное значение.
...
Рейтинг: 0 / 0
05.12.2005, 13:06:07
    #33417035
5631
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Открой панель инструментов , которая отвечает за работу с внешними данными, перейди в MS Query , нажми на кнопку SQL. Найди там на панели кнопку с операциями(кажется сумма), нажми на нее. Потом вручную исправь текст запроса.
SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Date_Carry, RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))

После Where...AND ((Account.Open_Close<>'З')) у тебя должно быть Group By
c перечислением всех выводимых полей(Group by Account.Open_Close,Account.Account,...) . Поле даты туда вносить не надо.
В предложении Select напиши Max(это поле) as это поле вместо названия поля
...
Рейтинг: 0 / 0
05.12.2005, 13:23:13
    #33417091
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Если я тебя правильно понял, то у меня должен получиться такой запрос:

SELECT Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, Max(RestDate.Date_Carry) AS 'RestDate.Date_Carry', RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))
GROUP BY Account.Open_Close, Account.Account, Account.Code_Currency, Account.Client, Account.Balance, Account.Oper, Account.Name_Account, Account.Close_Date, RestDate.Account, RestDate.Balance, RestDate.Code_Currency, RestDate.Rest


Сделал. Выборку все равно дает со всеми счетами и всеми данными.
...
Рейтинг: 0 / 0
05.12.2005, 13:35:52
    #33417129
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Для уменьшения объёма данных убрал несколько лишних столбцов.
Запрос нынче такой.

SELECT Account.Open_Close, Account.Account, Account.Balance, Account.Name_Account, Max(RestDate.Date_Carry) AS 'RestDate.Date_Carry', RestDate.Rest
FROM RSBank.dbo.Account Account, RSBank.dbo.RestDate RestDate
WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance AND ((Account.Open_Close<>'З'))
GROUP BY Account.Open_Close, Account.Account, Account.Balance, Account.Name_Account, RestDate.Rest


Все равно выбирает по несколько одинаковых счетов с остатками на разные даты.
...
Рейтинг: 0 / 0
05.12.2005, 13:44:36
    #33417164
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
примерно так

1) вариант, если счетов много, то можно и сервак надолго подвесить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
	Account.Open_Close, 
	Account.Account, 
	Account.Code_Currency, 
	Account.Client, 
	Account.Balance, 
	Account.Oper, 
	Account.Name_Account, 
	Account.Close_Date, 
	(SELECT TOP  1  RestDate.Rest FROM RestDate WHERE Account.Account = RestDate.Account AND Account.Balance = RestDate.Balance ORDER BY RestDate.Date_Carry) AS [Rest]
FROM 
	RSBank.dbo.Account Account
WHERE 
	(Account.Open_Close<>'З')

2) выриант посложгнее, но должен выполнятся быстрее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SELECT 
	Account.Open_Close, 
	Account.Account, 
	Account.Code_Currency, 
	Account.Client, 
	Account.Balance, 
	Account.Oper, 
	Account.Name_Account, 
	Account.Close_Date, 
	RI.Rest AS [Rest]
FROM 
	RSBank.dbo.Account Account
INNER JOIN (
	SELECT 
		RestDate,Account,
		RestSate.Balance,
		RestDate.Rest 
	FROM 
		Rest 
	INNER JOIN (
		SELECT 
			MAX(R.Date_Carry) AS MaxDate 
		FROM 
			RestDate R 
		GROUP BY 
			R.Account, R.Balance) ON R.Account = RestDate.Account AND R.Balance = RestDate.Balance AND R.MaxDate = RestDate.Date_Carry
	) RI ON RI.Account = Account.Account AND RI.Balance = Account.Balance
WHERE 
	(Account.Open_Close<>'З')
...
Рейтинг: 0 / 0
05.12.2005, 14:42:04
    #33417337
Gunn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Спасибо за помощь! Сейчас буду обкатывать!
...
Рейтинг: 0 / 0
05.12.2005, 18:15:33
    #33418046
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по MS Query
Gunn, маленький встречный вопрос.
Как вы из РС-Банк в сиквел данные закачиваете ?
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вопрос по MS Query / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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