|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
народ, Что-то не догоняю есть таблица, в ней есть данные по клиентам , данные были собранны из разных таблиц, которые корректировались. Они были объеденены и получилась одна таблица в которой ID клиента повторяются, некоторые поля для одно и того же кода заполнены и пустые. что-то типа вот этого: ID FISC 197082 2000021048737 197082 197096 197096 992106896549 198269 970807362497 198269 198271 198271 Нужен запрос который выдернит уникальные но ВСЕ ID!!!! и отберет только те записи по полю FISC которое не пустое для данного клиента, но а если оно пустое, тогда пустое значение для этого кода. То есть результат должен выглядеть таким образом: ID FISC 197082 2000021048737 197096 992106896549 198269 970807362497 198271 Я почти придумал, но и ваши решения также интересны. Спасибо всем. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:23 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
Valerii, Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:32 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
Sergey SizovValerii, Код: plaintext
FISC символьное поле!..... Там есть разные значения.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:45 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiSergey SizovValerii, Код: plaintext
FISC символьное поле!..... Там есть разные значения.... Там же есть еще несколько столбцов которые нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:46 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiSergey SizovValerii, Код: plaintext
FISC символьное поле!.....И что это меняет?Там есть разные значения....А представленный запрос рассчитан на одинаковые значения? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:46 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiValeriiпропущено... FISC символьное поле!..... Там есть разные значения.... Там же есть еще несколько столбцов которые нужны.Спасибо. Вас не учили объявлять сразу все условия задачи, а не выдавать их по одному на каждый вариант ответа? Присоедините Вашу таблицу еще раз. Но это уже сами или потрудитесь таки привести все условия задачи и в нормальном для технического форума виде, то есть с кодом генерации таблицы и исходных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:50 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
Sergey SizovValeriiпропущено... FISC символьное поле!.....И что это меняет?Там есть разные значения....А представленный запрос рассчитан на одинаковые значения? Не совсем корректно выразился, есть еще несколько столбцов, у которых также не одинковые значения для конкретного клиента, но их нужно также "добавить" к результату, адрес, телефон, нас. пункт. Для одного клиента могут быть вбиты по-разному, но для этих полей меня устраивает любое значение. Также брать с MAX(Field_1),MAX(Field_2),...MAX(Field_n) .... GROUP BY Field_1,Field_2,...Field_n? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 20:56 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiSergey Sizovпропущено... И что это меняет?пропущено... А представленный запрос рассчитан на одинаковые значения? Не совсем корректно выразился, есть еще несколько столбцов, у которых также не одинковые значения для конкретного клиента, но их нужно также "добавить" к результату, адрес, телефон, нас. пункт. Для одного клиента могут быть вбиты по-разному, но для этих полей меня устраивает любое значение. Также брать с MAX(Field_1),MAX(Field_2),...MAX(Field_n) .... GROUP BY Field_1,Field_2,...Field_n? Также есть один столбец типа Bit... его конечно можно потом приклеить, но в фоксе такая задача решается в один пинок. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 21:02 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiSergey Sizovпропущено... И что это меняет?пропущено... А представленный запрос рассчитан на одинаковые значения? Не совсем корректно выразился, есть еще несколько столбцов, у которых также не одинковые значения для конкретного клиента, но их нужно также "добавить" к результату, адрес, телефон, нас. пункт. Для одного клиента могут быть вбиты по-разному, но для этих полей меня устраивает любое значение. Также брать с MAX(Field_1),MAX(Field_2),...MAX(Field_n) .... GROUP BY Field_1,Field_2,...Field_n?Можно и Min(). Все зависит от данных и Ваших желаний. Если поставите Set Enginebahavior 70, то и аггрегатных функций не нужно будет, как раз наугад будет выдавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 21:04 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiТакже есть один столбец типа Bit... его конечно можно потом приклеить, но в фоксе такая задача решается в один пинок.Какая "такая"? Приклеивание? Или что? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 21:06 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
Sergey SizovValeriiТакже есть один столбец типа Bit... его конечно можно потом приклеить, но в фоксе такая задача решается в один пинок.Какая "такая"? Приклеивание? Или что? Такая - такого рода задача Мне нужен запрос для MS SQL Server 2000!!! В Фоксе проблем нет... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 21:07 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiSergey Sizovпропущено... Какая "такая"? Приклеивание? Или что? Такая - такого рода задачаВсе сразу стало понятно. Для понимания рекурсии надо понимать рекурсию.Мне нужен запрос для MS SQL Server 2000!!! В Фоксе проблем нет...Огласите, наконец, ВСЕ условия задачи. Поле bit и в MS SQL легко "приклеивается". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 21:12 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
OK. Еще раз. Есть таблица, которая сформировалась методои объединения из 2 таблиц, которые редактировались вручную, в них правились значения полей клиентв, Адрес, Город, Фискальный код, признак активности. Структура этой таблицы проста: ID, Lastname, FirstName, Address, city, fisc, ended - Bit, где уникальный ключ является ID. После объединения продублировальсь ID и все остальные поля которые для одного и того же ID могут быть разными. То есть мы имеем 2 записи на клиента, с информацией о нем которая хранится в остальных столбцах. Мне нужно получить набор данных с уникальным кодом ID - тоесть собрать весь список клиентов, но отобрать все остальные записи таким образом чтобы при пустом поле Fisc в одной из записей клиента в набор должна попасть только та, которая содержит в поле FISC хоть какое-то значение. Если обе записи клиента по данному полю окажутся пустыми - то в набор должна попасть любая из этих 2 записей со всеми остальными полями. ВРоде так... в Фоксе я бы сделал просто: SELECT ID, MAX(Fisc) AS Fisc, last_name, first_name, Address, city,Ended FROM SQLRESULT gROUP BY Id Но для SQL Server это не подойтет такай группировка так как эти поля также разные для отдного и того клиента. Конечно есть исключения - но это явно не тот случай ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 22:58 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
ValeriiOK. Еще раз. Есть таблица, которая сформировалась методои объединения из 2 таблиц, которые редактировались вручную, в них правились значения полей клиентв, Адрес, Город, Фискальный код, признак активности. Структура этой таблицы проста: ID, Lastname, FirstName, Address, city, fisc, ended - Bit, где уникальный ключ является ID. После объединения продублировальсь ID и все остальные поля которые для одного и того же ID могут быть разными. То есть мы имеем 2 записи на клиента, с информацией о нем которая хранится в остальных столбцах. Мне нужно получить набор данных с уникальным кодом ID - тоесть собрать весь список клиентов, но отобрать все остальные записи таким образом чтобы при пустом поле Fisc в одной из записей клиента в набор должна попасть только та, которая содержит в поле FISC хоть какое-то значение. Если обе записи клиента по данному полю окажутся пустыми - то в набор должна попасть любая из этих 2 записей со всеми остальными полями. ВРоде так... в Фоксе я бы сделал просто: SELECT ID, MAX(Fisc) AS Fisc, last_name, first_name, Address, city,Ended FROM SQLRESULT gROUP BY Id Но для SQL Server это не подойтет такай группировка так как эти поля также разные для отдного и того клиента. Конечно есть исключения - но это явно не тот случай Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Доложно же быть нормальное простое решение?!!!! Народ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2011, 23:17 |
|
Запрос для MS SQL
|
|||
---|---|---|---|
#18+
Valeriiв Фоксе я бы сделал просто: SELECT ID, MAX(Fisc) AS Fisc, last_name, first_name, Address, city,Ended FROM SQLRESULT gROUP BY Id Подобный запрос означает случайное значение полей last_name, first_name, Address, city,Ended. Точнее, они будут иметь значение произвольной записи с одним и тем же ID. Могут как относится к записи с пустым значением Fisc, так и к записи с заполненным значением Fisc. Не угадаешь к какой. Если бы не было дублей с пустым значением поля Fisc, то задача свелась бы к стандартной задаче поиска записи с максимальным значением некоего поля (Fisc). Соответственно, и решение стандартное Код: plaintext 1. 2. 3. 4. 5.
Однако в случае двух записей по одному ID с пустым значением поля Fisc получим обе эти записи в данной выборке. Нужен дополнительный признак, чтобы как-то однозначно отличить одну запись от другой в случае, если равны значение полей ID и Fisc. В данном случае можно использовать комбинацию всех остальных полей. А на случай совсем одинаковых записей по всем полям использовать опцию DISTINCT Получается как-то так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Правда, опять же тут надо учитывать типы полей. Если VarChar, то приводить к одной длине. Если не символьные, то конвертировать в Character. Ну, и такое сравнение невозможно для полей не определенной длины ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2011, 00:03 |
|
|
start [/forum/topic.php?fid=41&fpage=80&tid=1584587]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
299ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 425ms |
0 / 0 |