Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Вниз

2000 Добавить в SELECT номер строки.   Найти похожие ветки 

 
KAA   (2002-08-14 19:17) [0]

Как можно в селекте сделать еще одно поле, в котором будет порядковый номер строки? Т.е. чтоб все строки были подряд пронумерованы.


 
Suntechnic   (2002-08-14 19:27) [1]

..а что есть порядковый номер? Что он должен собой символизировать? Уникалным идентификатором он не является... более того если ты два раза выполнишь один о тот же запрос никто тебе не сможет гарантировать что под номером 1 будет одна и таже запись. Можно конечно добавить вычисляемое поле и там счётчик вставить, но подумай зачем?


 
Polevi   (2002-08-14 20:06) [2]

затем что если в счете у тебя 200 позиций и клиент хочет одну из них исправить - проще всего найти ее по номеру


 
Anatoly Podgoretsky   (2002-08-14 20:33) [3]

Да но другой запрос может выдать в другой последовательности, если не используется упорядочивание, для исправления лучше использовать другие критерии.


 
Reindeer Moss Eater   (2002-08-14 20:37) [4]

>Polevi ©
Проще всего и всегда было искать по Primary Key.


 
Val   (2002-08-14 20:40) [5]

вечная тема...
надо бы в FAQ уже выкидывать, настолько частая.


 
Suntechnic   (2002-08-14 20:59) [6]

>Polevi © (14.08.02 20:06)
>затем что если в счете у тебя 200 позиций и клиент хочет одну из них исправить - проще всего найти ее по номеру

Найти по номеру что? Нет такого понятия в БД, как номер записи. Вопрос: что вы собираетесь найти по номеру который симолизирует собой позицию записи в окне? Так и говорите, "клиент хочет исправить первую попавщуюся запись", а для этого номер её позиции в окне не нужен.



 
KAA   (2002-08-15 09:24) [7]

Ничего по номеру искать не надо будет, это просто информационное поле. Запрос напрямую клиентским приложением без разбора загоняется в эксел. Одно из полей - это порядковый номер записи, как правильно заметил Polevi, это будет счет выдаваемый клиенту.

>Val
Так хоть подскажи, или ссылку дай.


 
Praco   (2002-08-15 09:25) [8]

Примерно так:
select (select count(*) from authors a1 where a1.au_id <= a.au_id), a.* from authors a
order by a.au_id

"а что есть порядковый номер?" А не нужно теоретизировать. Вопрос-то конкретный. Реальные воплощения SQL серверов, как правило, не соответствуют требованиям реляционной модели. Кроме того, если в форме отчета есть поле "№ п/п", не будешь же рассказывать юзеру теорию реляционных отношений.


 
KAA   (2002-08-15 09:36) [9]

>Praco

Можно чуть подробней, что такое a1, a и поле au_id ?

>Кроме того, если в форме отчета есть поле "№ п/п", не будешь же рассказывать юзеру теорию реляционных отношений.

Все именно так. :)


 
Mike Kouzmine   (2002-08-15 09:37) [10]

Так им. Молодец Praco. Я про "А не нужно теоретизировать.Кроме того, если в форме отчета есть поле "№ п/п", не будешь же рассказывать юзеру теорию реляционных отношений."


 
AlexSam   (2002-08-15 09:45) [11]

Если ты выводишь данные в QR можно построить через QRLabel в событии BeforePrint: i:=i+1


 
KAA   (2002-08-15 09:48) [12]

>AlexSam
В эксель я их вывожу.


 
Johnmen   (2002-08-15 09:55) [13]

>Praco © (15.08.02 09:25)
>Реальные воплощения SQL серверов, как правило, не соответствуют
>требованиям реляционной модели.

Каким это таким требованиям ???


 
wicked   (2002-08-15 10:04) [14]

2 Praco ©
спасибо за идеи... :)
(век живи - век учись...)


 
Reindeer Moss Eater   (2002-08-15 10:07) [15]

Если паровоз должен повернуть, совсем не обязательно в его топку бросать кривые дрова.
Не надо заставлять SQL сервер нумеровать возвращаемый рекордсет, надо нумеровать вставляемые в Excel данные.


 
KAA   (2002-08-15 10:10) [16]

2 Reindeer Moss Eater ©
>Не надо заставлять SQL сервер нумеровать возвращаемый рекордсет, надо нумеровать вставляемые в Excel данные.

Надо. Передо мной стоит задача, полностью формировать таблицу. Полностью, это значит что и порядковые номера записей. Это не технический, а административный вопрос.


 
Reindeer Moss Eater   (2002-08-15 10:12) [17]

>KAA
Не надо. Сделай запрос к данным из книги Excel. Тем более у тебя MSSQL.


 
Reindeer Moss Eater   (2002-08-15 10:14) [18]

Либо промежуточная таблица с дополнительным полем "Номер записи" спасет тебя.


 
KAA   (2002-08-15 10:16) [19]

2 Reindeer Moss Eater

Нет никакой книги эксел, ее клиент создает, отрабатывает и удаляет. Мало того, сегодня одна книга, завтра ее изменят, послезавтра какой-нибудь кристал репорт прикрутят, а процедура должна быть универсальной, чтоб один раз написать и забыть.


 
Polevi   (2002-08-15 10:17) [20]

2Suntechnic ©
Уважаемый, если у меня набор данных отсортирован по коду товара, я вполне могу расчитывать на то что каждый раз порядок строк будет одинаков (если не добавлять позиций). И не надо мне сообщать прописные истины насчет понятия номера записи. В моем понятии клиент это не оператор, который использует мою программу, а клиент компании с которым оператор работает.

2Reindeer Moss Eater
У меня в таблице содержимого счетов несколько милионов записей - пользователю конечно будет очень интересно узнать что первая позиция в его счете имеет номер 1347345 - вот они с клиентом будут общий язык находить по телефону когда клиент из мухосранска передумал и хочет вместо 10 шт товара взять 11 штук..


 
Reindeer Moss Eater   (2002-08-15 10:21) [21]

Сформируйте промежуточную таблицу, добавьте поле "Номер по порядку" Пройдитесь курсором и пронумеруйте это поле.


 
3JIA9I CyKA   (2002-08-15 10:32) [22]

Reindeer Moss Eater дело говорит!


 
Val   (2002-08-15 10:45) [23]

кстати, вопрос знатокам MSSQL: а нет ли у данного сервера такого замечательного псевдостолбца как rownum из Oracle?


 
Praco   (2002-08-15 10:49) [24]

KAA © (15.08.02 09:36)
au_id - уникальный идентификатор. a1 - алиас таблички. Если не понятно, почитай М.Грабера.

Johnmen © (15.08.02 09:55)
>Praco © (15.08.02 09:25)
>Реальные воплощения SQL серверов, как правило, не соответствуют
>требованиям реляционной модели.

Каким это таким требованиям ???

Например: в реляционной модели порядок следования полей не важен. В реальных SQL серверах поля пронумерованы и их порядок, как правило, важен.
NULL значения и операции с ними, трактовка доменов, и т.д.,... вспоминать не охота. Короче, теория реляционных отношений - наука, теория реляционных баз - прикладная псевдонаучка, слишком много упрощений и аксиом. Конкретный SQL сервер в стремлении расширить свои возможности еще больше отходит от требовани теории. MS SQL - яркий пример.
Главный аргумент: реляционное отношение не может быть ненормализовано, иначе это не отношение. Но любой SQL сервер позволяет создавать ненормализованные базы.
Продолжать не хочу, Дейта читал давно. :)




 
3JIA9I CyKA   (2002-08-15 10:53) [25]

2Val - Нету.


 
KAA   (2002-08-15 11:03) [26]

2 Praco ©
Все понял, протормозил немного. :)
Большое спасибо, сработало.


 
Johnmen   (2002-08-15 11:05) [27]

>Praco © (15.08.02 10:49)
>... В реальных SQL серверах поля пронумерованы и их порядок,
>как правило, важен.

Ты где такого начитался ????!!!!!!! :)))))

Уважаемый ! Поскольку ты читал давно, то видимо подзабыл основные моменты реляц.БД ! А теперь, извини, гонишь пургу...

И вообще, какое отнощение нумерация (см.вопрос) имеет к реляционности ???!!!


 
Val   (2002-08-15 11:06) [28]

тогда, скорее всего придется использовать курсор, как уже говорили, получаем соответственно потерю в скорости :(
Вариант же Praco © (15.08.02 09:25) безусловно хорош, но только если не важна сортировка, как я понял. А пользователь, как правило хочет видеть отсортированный и пронумерованный набор.


 
Johnmen   (2002-08-15 11:09) [29]

...И еще...Ты читал некоего и считаешь его рассуждения истиной в последней инстанции...Я же читал множество разных авторов, и они говорят несколько иное, чем Дейт...


 
Leran2002   (2002-08-15 11:24) [30]

А можно такое проделать с Парадохом???
Типа попробывал:
select
(select count(*)
from "customer.db" a1
where a1.CustNo<=a.CustNo) as Num,
a.*
from "customer.db" a
order by a.CustNo

Такой запрос проканывает но во всех записях Num=0...


 
Mike Kouzmine   (2002-08-15 11:25) [31]

Сколько ни читай, и кого ни читай, а истина все равно где-то рядом. Познавший истину молчит, а не познавший - горячится.
(Себя к познавшим не отношу)


 
jonik pegas   (2002-08-15 11:37) [32]

Ты читал некоего и считаешь его рассуждения истиной в последней инстанции...Я же читал множество разных авторов, и они говорят несколько иное, чем Дейт...
Ну что же читай дальше
Был поставлен конкретный вопрос-Praco дал на него конкретный полный ответ!. Можно и поучиться.




 
Johnmen   (2002-08-15 11:51) [33]

>jonik pegas © (15.08.02 11:37) И иже с ним...

Отсутствие внимательности при прочтении постингов не является той чертой, которую надо обозначать и делать на основе этого саркастических замечаний.


 
3JIA9I CyKA   (2002-08-15 12:33) [34]

Кто посмел на Johnmen наезжать!?
Стыдно вам! ОН ЖЕ ПРАВ!!!


 
Mike Kouzmine   (2002-08-15 12:45) [35]

Прав тот, у кого больше прав или денег, что одно и тоже. Любое высказывание любого человека не истина в последней инстанции.
КАА получил задание и спросил конкретно, то надо отвечать конкретно или не отвечать. Ответ "нет и почему" или "да и как" - правильный, а все рассуждения типа "так делать неправильно потому что я (мы, они, и прочие уважаемые деятели) так не делают" являются бредом сивой кобылы.


 
Mike Kouzmine   (2002-08-15 12:47) [36]

3JIA9I CyKA © - стыдно у кого видно, а у кого болтается, то не считается


 
jonik pegas   (2002-08-15 12:50) [37]

Johnmen
Извиняюсь конечно. Погорячился...Мне стыдно
Но на основе совета Praco я сразу же наконец то сделал вывод порядкового номера в запросе для чего ранее мне необходимо было вспомогательное поле-(я задавал такой же вопрос ранее в форуме -ничего лучшего посоветовать не смогли)-отсюда и такая реакция. Но господа, по моему мы спорим на разные темы. Меня устраивает такая ПРАКТИЧЕСКАЯ реализация


 
Johnmen   (2002-08-15 12:56) [38]

>Mike Kouzmine (15.08.02 12:45)

Это ты к чему ?

>Mike Kouzmine (15.08.02 12:47)

>стыдно у кого видно< И тому, кто смотрит.

Ж:-))


 
KAA   (2002-08-15 12:58) [39]

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

Но также надо помнить, что когда человек что-то спрашивает, а тебе кажется что это не правильно, вполне возможно что ты просто не знаешь каких-нибудь нюансов.

Так что идеальный ответ выглядел бы так: "То что ты хочешь несколько криво, и по хорошему это надо сделать так. Но если хочешь по своему делать, то делай вот так."


 
Johnmen   (2002-08-15 13:03) [40]

>jonik pegas © (15.08.02 12:50)

Забыли...
Я тоже иногда горячусь...
Совет Praco © (15.08.02 09:25) вполне премлем, согласен, но дальнейшие его рассуждения о реляц.модели меня сильно напрягли...:))))


 
Mike Kouzmine   (2002-08-15 13:04) [41]

Не к тебе Johnmen. А к другому. Прошу прощения за похабщину у всей честной компании, не выспался. Да и дым над Москвой, настроения не прибавляет. :(


 
Praco   (2002-08-15 13:04) [42]

Johnmen ©
ОК, про поля неправ. Хотел сказать: в отношении атрибуты не упорядочены, а в таблице БД упорядочены(существует порядок перечисления полей в таблице). => Отступление от реляционной модели.

Johnmen © (15.08.02 09:55)
>Praco © (15.08.02 09:25)
>Реальные воплощения SQL серверов, как правило, не соответствуют
>требованиям реляционной модели.

Каким это таким требованиям ???

Свойства отношений(не все) :
-кортежи уникальны
-значения атрибута в любом кортеже атомарно

Реальные СУБД допускают нарушения этих свойств для табличек. И это не единственные отклонения от модели. Вот что я хотел сказать.

Мне Дейт тоже не понравился, но если он не авторитет, то кто?



 
Johnmen   (2002-08-15 13:23) [43]

>Praco © (15.08.02 13:04)

Авторитетов много...И что самое интересное, их понимание и определения реляц.модели могут расходиться ! (не сильно, но могут).

>Реальные СУБД допускают нарушения этих свойств для табличек.

Ну пусть. Главное, чтобы человек не нарушал. Хотя допускается и нарушение в утилитарных целях :)




 
SergSuper   (2002-08-15 13:59) [44]

> Praco
По-моему Вы путаете требования к структуре БД с требованиями к SQL серверам. Я например не могу представить (и наверняка Вы не сможете) что бы сервер не позволяет создавать ненормализованные базы.


 
Suntechnic   (2002-08-15 17:47) [45]

Ну и наговорили, даже комментировать нет желания. Только по сути...
>Polevi © (15.08.02 10:17)
Уважаемый, если у меня набор данных отсортирован по коду товара, я вполне могу расчитывать на то что каждый раз порядок строк будет одинаков (если не добавлять позиций).
Вы уж оговаривайте сразу все условия... если не добавлять, если не удалять, если не редактировать код товара... итого: если набор данных статический. Может в вашем конкретном случае оно и так, но не надо давать советы космического маштаба всем остальным.

>Praco © (15.08.02 09:25)
Примерно так:
select (select count(*) from authors a1 where a1.au_id <= a.au_id), a.* from authors a
order by a.au_id

"а что есть порядковый номер?" А не нужно теоретизировать. Вопрос-то конкретный. Реальные воплощения SQL серверов, как правило, не соответствуют требованиям реляционной модели. Кроме того, если в форме отчета есть поле "№ п/п", не будешь же рассказывать юзеру теорию реляционных отношений.


Единственное практическое применение этого номера я вижу в улучшаемости читаемости отчётов и всё. Но... Вы видели план запроса генерируемый сервером для того что вы предложили? Зачем вы заставляете заниматься сервер дурной работой? А работа ведь дурная, потому как с точки зрения сервера это число полная фикция. Уж если так сложилось что клиенту нужен этот номер(клиент в смысле ПО), то его проше генерить во время отображения или генерации отчёта на этом самом клиенте.


 
Reindeer Moss Eater   (2002-08-16 08:47) [46]

>Suntechnic
В том то и дело, что на план смотрят немногие, зато почти все усвоили простую, но часто спорную истину - "курсор - это тормоза"


 
Ekaterina   (2002-08-16 08:50) [47]

А всё-таки, почему в Paradoxe такой запрос не работает как надо?


 
Leran2002   (2002-08-16 09:03) [48]

можно воспользоваться генератором:
CREATE GENERATOR NUM_GEN;

перед использыванием ставим его в 0:
SET GENERATOR NUM_GEN TO 0;

а потом выполнить запрос:
SELECT GEN_ID(NUM_GEN,1) AS NUM, C.*
FROM CUSTOMER C;

чтоб небыло путаницы можно для каждого юзера создать собственный генератор...


 
Reindeer Moss Eater   (2002-08-16 09:21) [49]

>Leran2002
А нет генераторов в MSSQL.


 
Leran2002   (2002-08-16 09:45) [50]


> Reindeer Moss Eater (16.08.02 09:21)

Да жалко конечно...


 
nikolo   (2002-08-16 10:20) [51]

Слушайте, ребятки, давайте договоримся на будущее, что если задается конкретный вопрос, то нужно давать конкретный ответ!
Если делать нечего и хочется просто потрепаться, то для этого есть соответствующий раздел. Своими умозаключениями вы просто достаете, читать смешно. У человека проблема, а вы ему "...а что есть порядковый номер?" Да какая разница? Козе сразу понятно, что ему нужно получить!
Надеюсь, вы будете не против моего предложения.


 
Johnmen   (2002-08-16 10:28) [52]

>nikolo © (16.08.02 10:20)
>...Своими умозаключениями вы просто достаете, читать смешно.

Так достаем или смешно ? Ты бы определился...
А уж потом м.б. и заглючим договор...


 
Reindeer Moss Eater   (2002-08-16 10:30) [53]

>nikolo
Ну вот пример такого конкретного ответа:
Добавить физическое поле в таблицу, к которой делается запрос.
Выполнить запрос c RequestLive=True.
Пройти по записям и пронумеровать их.
Встать в начало набора данных.
А польза от такого конкретного совета?


 
Suntechnic   (2002-08-16 10:34) [54]

>nikolo © (16.08.02 10:20)
Интересно, вы давно на этом форуме? Что-то мне подсказываеь что недавно. Я не беру в рассмотрение данный конкретный случай, но зачастую тут(на форуме) народ сам неведает чего хочет. А такие альтруисты как я :) пытаются всё-таки разобраться зачем надо изобретать велосипед...

Своими умозаключениями вы просто достаете, читать смешно.
Ну тут проблема решается достаточно просто, не читайте...

Сколько людей столько мнений... у вас оно одно... у других другое... так что будьте терпимее.


 
Polevi   (2002-08-16 11:22) [55]

2Suntechnic ©
Где вы видели чтобы я в этой ветке что-нибудь кому-нибудь советовал ??? Если юзер хочет номер записи - значит так надо вот и все.


 
Suntechnic   (2002-08-16 11:37) [56]

>Polevi © (16.08.02 11:22)
Где вы видели чтобы я в этой ветке что-нибудь кому-нибудь советовал ???
Ваш самый первый пост можно трактовать как совет. Хотя если оно не так прошу прощения...

Если юзер хочет номер записи - значит так надо вот и все.
Желание клиента закон :)



 
cherruty   (2002-08-16 11:37) [57]

Это же очень просто читайте Рона Стаукап "SQL Server"

SELECT RankID =
( select count (distinct Field1 )
FROM Table1
WHERE Table1.Field1 <= Table.Field1 ),
Table.*
FROM Table1 Table

RankID и будет порядковый номер
Field1 - любое поле с уникальными значениями




 
cherruty   (2002-08-16 11:38) [58]

Это же очень просто читайте Рона Стаукап "SQL Server"

SELECT RankID =
( select count (distinct Field1 )
FROM Table1
WHERE Table1.Field1 <= Table.Field1 ),
Table.*
FROM Table1 Table

RankID и будет порядковый номер
Field1 - любое поле с уникальными значениями




 
Johnmen   (2002-08-16 11:49) [59]

>cherruty (16.08.02 11:38)

Рона Стаукап ты конечно почитал, а вот предыдущие посты видимо было влом...:)


 
Temp   (2002-08-16 12:40) [60]

Можно создать процедуру:

create table #Test(ID_REC int identity(1, 1) not null,далее список нужных полей)

insert into #Test(список нужных полей) select (список нужных полей) from Test where условия

select * from #test

в итоге получаем поле ID_REC с номерами по порядку


 
Кулюкин Олег   (2002-08-16 13:25) [61]

2 nikolo © (16.08.02 10:20)
> Слушайте, ребятки, давайте договоримся на будущее, что если задается конкретный вопрос, то нужно давать конкретный ответ!
Вся трудность в том, что часто задается "неправильный" вопрос, т.к. человек его задавший неверно понимает стоящую перед ним задачу (или подходы к ее решению).
В таких случаях лучше не отвечать на вопрос сразу, а уточнить, чего на самом деле хочет автор.


 
nikolo   (2002-08-16 13:33) [62]

> cherruty, молодец! Из всех единственно правильный ответ дал. Вот только кажется делать надо не
"SELECT RankID =", а "SELECT distinct RankID ="


 
Delirium   (2002-08-16 13:55) [63]

set nocount on
select Identity(int, 1,1) as Num, *
into #tmp from MyTable
select * from #tmp
drop table #tmp


 
KSergey   (2002-08-16 15:27) [64]


> Delirium © (16.08.02 13:55)

Эх, не успел я ;)
Да, вот это именно то средство, которое есть в MS SQL для нумерации
Можно еще несколько иначе извернуться - после выборки темповой таблицы добавить в ней поле Identity, хотя вот именно такого способа, как у Delirium я не знал...


 
3JIA9I CyKA   (2002-08-16 15:33) [65]

И я 8(


 
asdf   (2002-08-16 15:40) [66]

Догоним постов до сотки?!!!:)
Не много осталось!:)))



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2002.09.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.62 MB
Время: 0.01 c
6-14196
Белый Орел
2002-06-26 15:07
2002.09.05
Постояное соединение с сервером


1-14126
Ahmad
2002-08-21 22:03
2002.09.05
Как округлать числа в Delphi?


1-13996
Hollander
2002-08-25 04:29
2002.09.05
Edit проблема с пробелами


8-14181
Ptushenko Denis
2002-04-25 10:02
2002.09.05
Как определить есть ли звуковая карта на компе ?


3-13977
Димон1
2002-08-16 12:39
2002.09.05
В mssql вставить в поле типа image данные из другой строки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский