SQL Server 2000, please, Help!

Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

SQL Server 2000, please, Help!

Post by Veronica »

У меня 4 разные квери, результаты которых нужно собрать в один csv file. Все вроде бы работает, но между результатами этих кверей в файле имеется пустая строчка. Как избавиться от нее?
Кроме того, нужно в результатах пронумеровать ряды. Я не знаю как это сделать. Причем нумерация должна продолжаться от одной квери к другой. Есть ли какие-нибудь не очень сложные решения для этого?
Я -- не программист, в интерфейсах опыта почти никакого. Что-нибудь простое.
Я сейчас открываю этот csv file в Экселе, удаляю пустые строчки между результатами, затем нумерую ряды. ( все с помощью макро). Как это все сделать в SQL Servere сразу же?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: SQL Server 2000, please, Help!

Post by Sabina »

Объедините ваши queries оператором UNION или UNION ALL в зависимости от того нужны дубликаты в конечном результате или нет.

Почитать можно на:
UNION
UNION ALL

Cабина

[/url]
Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

Re: SQL Server 2000, please, Help!

Post by Veronica »

Sabina wrote:Объедините ваши queries оператором UNION или UNION ALL в зависимости от того нужны дубликаты в конечном результате или нет.

Почитать можно на:
UNION
UNION ALL

Cабина

[/url]


Будет ли работать UNION ALL в моем случае? У меня в каждой квери разные филды, мне эти самые филды тоже нужно в аутпут заносить.
Я, наверное, не смогла как следует задачу описать.

Выглядит примерно так(то что я хочу):

номер_рекорда инструмент купон матюрити
1 Бонд 5.0 20330122
2 Бонд 4.35 20200122
номер_рекорда инструмент делта гамма цена
3 Опшен .38 .18 1.07
4 Опшен .42 .25 .280

А у меня сейчас так (пробел между двумя результатами и не знаю как нумеровать строчки):
номер_рекорда инструмент купон матюрити
Бонд 5.0 20330122
Бонд 4.35 20200122

номер_рекорда инструмент делта гамма цена
Опшен .38 .18 1.07
Опшен .42 .25 .280
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: SQL Server 2000, please, Help!

Post by Sabina »

Veronica wrote:Будет ли работать UNION ALL в моем случае? У меня в каждой квери разные филды, мне эти самые филды тоже нужно в аутпут заносить.


Тогда вам нужен JOIN
Какой именно трудно сказать не зная всех queries и условий задачи.

Сабина
Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

Re: SQL Server 2000, please, Help!

Post by Veronica »

Sabina wrote:
Veronica wrote:Будет ли работать UNION ALL в моем случае? У меня в каждой квери разные филды, мне эти самые филды тоже нужно в аутпут заносить.


Тогда вам нужен JOIN
Какой именно трудно сказать не зная всех queries и условий задачи.

Сабина


Джойн не даст мне филдов для каждой квери.

Или это какой-то другой джойн?
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: SQL Server 2000, please, Help!

Post by Sabina »

Veronica wrote:Джойн не даст мне филдов для каждой квери.


Если и outer join (извините я не заметила, что он на этом сайте в отдельную главу вынесен http://www.1keydata.com/sql/sqlouterjoin.html)
не решает вашей задачи, то значит надо попробовать что-то решать на уровне экспорта из SQL Server в Эксель.

Сабина
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

Я наверное не совсем понимаю вопрос.

Поля можно сгенерировать, а потом сделать union.

select instrument, kupon, maturity, 0 gamma, 0 delta, 0 price from bla bla bla

union all

select instrument, 0 kupon, 0 maturity, gamma, delta, price select from bla bla bla

С трудом представляю зачем это может понадобиться. Зачем объединять два набора? Что-то у вас с постановкой плохо...

С нумерацией будет сложно... Даже и не скажу как это сделать с наскоку...
Готовой функции нет... :( Но должно быть решение... Курсор например...
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Нумеруется как раз элементарно
Если в result set записи
select A,B,C
то

create table #res (n int identity, A ..., B ..., C ...)
insert into #res (A,B,C) select A,B,C order by ...
select * from #res

В n будет 1,2,3...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

del.

Спать, спать пора...
Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

Post by Veronica »

Вот два файла:
в первом результаты как нужно,
во втором результаты как у меня сейчас

Советы?
You do not have the required permissions to view the files attached to this post.
Last edited by Veronica on 23 Jan 2004 16:13, edited 1 time in total.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

О как все запушено
Почему у Вас строчка с Header повторяется много раз ?
Почему она дожна повторяться ?

Как правило экспорт SQL -> XLS иммет вид

<строка заголовка>
<строка данных>
...
<строка данных>

Прчием строки данных имеют одинаковый тип данных то етсь однородны

У вас я вижу нечто вроде

<строка заголовка1>
<строка данных>
...
<строка данных>

<строка заголовка2>
<строка данных>
...
<строка данных>

Что это ? У вас stored procedure выдает сразу много result sets ? или это не строки заголовков а таике данные ? Какой тип тогда имеет колонка B ?

Приведите PLS структуру таблицы и или кверь или процедуру которая выкачивает данные
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

ПРочитал еще раз первое сообщение
Итак у Вас четыре квери. Сделайте одну с помощью UNION ALL как сказала Сабина потому что тип колонок вроде у Вас ординаков. ПРонумеруйте строки с помощью Identity
Но вот про что Вы должны сразу забыть - это про то что у Вас заголовки будут в середине данных
Заголовок с названиями колонок будет только один
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

Post by Veronica »

Dmitry67 wrote:ПРочитал еще раз первое сообщение
Итак у Вас четыре квери. Сделайте одну с помощью UNION ALL как сказала Сабина потому что тип колонок вроде у Вас ординаков. ПРонумеруйте строки с помощью Identity
Но вот про что Вы должны сразу забыть - это про то что у Вас заголовки будут в середине данных
Заголовок с названиями колонок будет только один


В этом то и проблема, что требуется произвести флат файл с повторяющимися филдами.
Филды разные для каждой группы инструментов,
они одинаковы только вначале, первые 5 или 6.
Я поэтому и делаю 4 квери для 4 групп инструментов,
затем мне все эти результаты нужно собрать в один файл,
пронумеровать секвеншуалли все ряды, избавиться от пробелов между результатами кверей и послать этот файл в другую систему.
Это требование этой другой системы - такой файл с филдами для каждой группы, номерами рядов и никаких пробелов.
Сейчас думаю, что может быть пробелы не проблема, но как тогда нумеровать ряды, чтобы нумерация не прерывалась от одной группы к другой?

Прошу прощения за запутанность.

У меня решение есть в Экселе но мне бы хотелось сразу же готовый результат с SQL Server, если это возможно.

Спасибо большое за ваше время
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Если у Вас четыре квери с разными полуми то сделайте вот что
1. Каждую записывает во временную таблицу с N identity, #T1,#T2,#T3,#T4
2. Результат из #T1 читаем напрямую
3. Из T2:
declare @t2base int
select @t2base=max(N) from #T1
if @t2base is null set @t2base=0
select N+@TéBase,...... from #T2
4 итд

Нумерацию сделали
А вот пробелы придется убрать макросом
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Veronica
Уже с Приветом
Posts: 673
Joined: 08 Jun 2001 09:01
Location: USA

Post by Veronica »

Dmitry67 wrote:Если у Вас четыре квери с разными полуми то сделайте вот что
1. Каждую записывает во временную таблицу с N identity, #T1,#T2,#T3,#T4
2. Результат из #T1 читаем напрямую
3. Из T2:
declare @t2base int
select @t2base=max(N) from #T1
if @t2base is null set @t2base=0
select N+@T&eacute;Base,...... from #T2
4 итд

Нумерацию сделали
А вот пробелы придется убрать макросом


Спасибо
я попробую
кажется такое элегантное решение
я бы сама ни за что не догадалась

Спасибо еще раз
NNemo
Уже с Приветом
Posts: 1935
Joined: 15 Sep 2003 17:49
Location: Ukraine, Mariupol -> USA everywhere :-)

Post by NNemo »

Да и заголовки можно в средину вставить просто как отдельный select с константами в UNION.

Может проще все от Excel отплясать в таком случае?
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

NNemo wrote:Да и заголовки можно в средину вставить просто как отдельный select с константами в UNION.


Да но точда надо будет все типы сделать совместимыми
Или использовать sql_variant
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
vovap
Уже с Приветом
Posts: 12014
Joined: 05 Apr 2000 09:01
Location: Philadelphia, PA, USA

Post by vovap »

Я извиняюсь за природную тупость, но не проще ли будет вывод сделать таки в 4 разные файла, а потом их склеить в один?
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

Dmitry67 wrote:
NNemo wrote:Да и заголовки можно в средину вставить просто как отдельный select с константами в UNION.


Да но точда надо будет все типы сделать совместимыми
Или использовать sql_variant

Можно просто в select'е слепить comma-separated строчки.
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Niky wrote:
Dmitry67 wrote:
NNemo wrote:Да и заголовки можно в средину вставить просто как отдельный select с константами в UNION.


Да но точда надо будет все типы сделать совместимыми
Или использовать sql_variant

Можно просто в select'е слепить comma-separated строчки.


Если Excel тянет данные через Get External Data, то он тогда запихнет все в колонку A (строковую)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

Dmitry67 wrote:
Niky wrote:
Dmitry67 wrote:
NNemo wrote:Да и заголовки можно в средину вставить просто как отдельный select с константами в UNION.


Да но точда надо будет все типы сделать совместимыми
Или использовать sql_variant

Можно просто в select'е слепить comma-separated строчки.


Если Excel тянет данные через Get External Data, то он тогда запихнет все в колонку A (строковую)

Как я понял из самого первого поста - цель автора - получить csv файл.

Return to “Вопросы и новости IT”