Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
Подскажите пожалуйста, каким образом сделать выборку всех полей таблицы по, скажем 4 уникальным полям.
Если я пишу select поле1, ..., полеN from .... group by поле1, ..., полеN я получаю правильную выборку, но мне нужны все поля таблицы. Как только я пишу:
select поле1, ..., полеN, поле N+1,..., поле M from .... group by поле1, ..., полеN
запрос перестает работать.
Спасибо
20 мар 12, 12:45    [12280262]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Если я пишу select
Guest
Horan Deep,

сам подумай, если ты схлопываешь строки по четырем столбцам, то что должно получиться в столбцах которые не участвуют в grup by?
сплющенные значения всего что схлопнулось?
20 мар 12, 12:47    [12280271]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну так прочитайте текст ошибки, с которым он перестает работать.
20 мар 12, 12:48    [12280273]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
lapposv
Member

Откуда: Санкт-Петербург
Сообщений: 27
Horan Deep
Подскажите пожалуйста, каким образом сделать выборку всех полей таблицы по, скажем 4 уникальным полям.
Если я пишу select поле1, ..., полеN from .... group by поле1, ..., полеN я получаю правильную выборку, но мне нужны все поля таблицы. Как только я пишу:
select поле1, ..., полеN, поле N+1,..., поле M from .... group by поле1, ..., полеN
запрос перестает работать.
Спасибо

Сделать Ваз запрос вложенным, и связать его с основной таблицей по тем полям, что участвуют в группировке, не забыв про distinct.
20 мар 12, 12:50    [12280286]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
если версия 2005 и выше, то можно так


select top 1 with ties поле1, ..., полеN, поле N+1,..., поле M from .... order by row_number() over (partition by поле1, ..., полеN, поле N+1)
20 мар 12, 12:51    [12280292]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
lapposv,

я видимо всех сбил не корректным применением group by, мне нужно вывести все поля таблицы, но только те строки, которые определяются уникальной комбинацией поле1,...,полеN

пишу

select distinct поле1,...,полеN from ...

получаю нужные строки, как сделать ту же выборку, но чтобы в результат были выведены все поля?

Спасибо
20 мар 12, 13:05    [12280436]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
вот теперь вообще непонятно
привидите пример
20 мар 12, 13:07    [12280448]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Anatoly Podgoretsky
Member

Откуда:
Сообщений: 62908
Что бы получить все поля, надо перечислить все поля
20 мар 12, 13:11    [12280496]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
видимо всех сбил
Guest
Horan Deep
lapposv,

я видимо всех сбил не корректным применением group by, мне нужно вывести все поля таблицы, но только те строки, которые определяются уникальной комбинацией поле1,...,полеN

пишу

select distinct поле1,...,полеN from ...

получаю нужные строки, как сделать ту же выборку, но чтобы в результат были выведены все поля?

Спасибо

12280271 заменяем group by на distinct и снова пробуем ответить.
20 мар 12, 13:14    [12280528]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Может так?
with zz
as
(
select distinct field1,..fieldn
from table
)
select t.*
from table t
inner join zz on zz.field1 = t.field1 and .... zz.fieldn = t.fieldn
20 мар 12, 13:16    [12280537]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
denis2710
Может так?
with zz
as
(
select distinct field1,..fieldn
from table
)
select t.*
from table t
inner join zz on zz.field1 = t.field1 and .... zz.fieldn = t.fieldn


а чем отличается Ваш запрос от банального
select t.*
from table t

наличием лишних операторов?
20 мар 12, 13:18    [12280558]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
denis2710
Может так?
with zz
as
(
select distinct field1,..fieldn
from table
)
select t.*
from table t
inner join zz on zz.field1 = t.field1 and .... zz.fieldn = t.fieldn

Во-первых, среди field1,..fieldn могут быть значения равные null.
Во-вторых, запрос select * from table вернёт не тот же результат?
20 мар 12, 13:21    [12280595]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
HandKot,

думаю, правильно ли я поставил задачу, видимо нет.

у меня есть таблица, в которую слиты результаты заполнения разными людьми одной и той же таблицы (каждый заполнял свои строки)
я знаю, что 4 поля являются уникальными:

КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4

запись выглядит как

КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4, Поле1, ..., ПолеN

Причем Поле1, ..., ПолеN может быть заполнено, а может и нет, в зависимости от того, кто заполнял

т.е. я имею дубли (первые 4 значения - уникальный ключ)
01, 01, 01, 01, А, Б
01, 01, 01, 01, NULL, NULL

но может быть и так:

01, 01, 01, 01, Г, Д
01, 01, 01, 01, Г, NULL

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

спасибо
20 мар 12, 13:28    [12280662]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
какой он уникальный
Guest
Horan Deep
HandKot,

думаю, правильно ли я поставил задачу, видимо нет.

у меня есть таблица, в которую слиты результаты заполнения разными людьми одной и той же таблицы (каждый заполнял свои строки)
я знаю, что 4 поля являются уникальными:

КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4

запись выглядит как

КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4, Поле1, ..., ПолеN

Причем Поле1, ..., ПолеN может быть заполнено, а может и нет, в зависимости от того, кто заполнял

т.е. я имею дубли (первые 4 значения - уникальный ключ)
01, 01, 01, 01, А, Б
01, 01, 01, 01, NULL, NULL

но может быть и так:

01, 01, 01, 01, Г, Д
01, 01, 01, 01, Г, NULL

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

спасибо

какой он нахрен уникальный если у вас дубли?
нумеро тринити - 12280271
20 мар 12, 13:33    [12280721]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
iljy
Member

Откуда:
Сообщений: 8711
Horan Deep,

интересно, а как вы будете определять "более полную информацию" для, допустим, таки строк:
01, 01, 01, 01, Г, NULL
01, 01, 01, 01, NULL, Д

?
20 мар 12, 13:35    [12280734]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Horan Deep
выбрать строки с наиболее полной информацией
Как только формализуете понятие "наиболее полная информация", так сразу и получите ответ.
20 мар 12, 13:39    [12280769]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
iljy,

таких записей не должно быть, т.к. каждый заполнял свои строки, но мог заполнить не все поля
20 мар 12, 13:41    [12280787]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
invm,

наиболее полная информация означает, что в каждой заполненной (отредактированной) строке, заполнено больше полей, чем в превоначальном файле.
т.е. любая пара строк с одинаковыми ключевыми полями будет отличаться количеством заполненных полей. Та строка, где их больше, является полной. Например

пользователь Иванов
01, 01, 01, 01, А, NULL - в выданной пользователю изначальной таблице (это был иксель)
01, 01, 01, 01, А, Б - строка с наиболее полной информацией

пользователь Табуреткин
01, 01, 01, 02, NULL, Д - в выданной пользователю изначальной таблице (это был иксель)
01, 01, 01, 02, Г, Д - строка с наиболее полной информацией
но полей много (в районе 100)
20 мар 12, 13:48    [12280844]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
дык, если правильно понял, то подойдет обычный мах ?


declare @t table(f1 varchar(2), f2 varchar(2), f3 varchar(2), f4 varchar(2), f5 varchar(2), f6 varchar(2))
insert into @t(f1, f2, f3, f4, f5, f6) values
('01', '01', '01', '01', 'А', 'Б'),
('01', '01', '01', '01', NULL, NULL)
select f1, f2, f3, f4, MAX(f5), MAX(f6) from @t group by f1, f2, f3, f4
20 мар 12, 13:49    [12280853]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
HandKot,

на первый взгляд должно подойти, спасибо. функция max сработает если строк будет больше 2?
20 мар 12, 13:57    [12280953]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
Horan Deep, если в двух строках заполнены все поля, какая из них наиболее полная?

HandKot, ваш запрос неверен.
20 мар 12, 13:58    [12280959]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Horan Deep
Member

Откуда:
Сообщений: 9
invm,

тогда это однозначная ошибка тех, кто осуществлял ввод. нужно только ее обнаружить и ткнуть носом. сейчас подумаю как.
20 мар 12, 14:10    [12281097]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Если я пишу select
Guest
Horan Deep
функция max сработает если строк будет больше 2?

ооооок...
20 мар 12, 14:12    [12281124]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
Если я пишу select
Guest
Horan Deep
invm,

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

даваааай...
20 мар 12, 14:15    [12281160]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо выбрать все поля таблицы но по нескольким уникальным  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
declare @Таблица table
(
 КлючПоле1 int,
 КлючПоле2 int,
 КлючПоле3 int,
 КлючПоле4 int,
 Поле1 numeric(18,2),
 Поле2 varchar(10)
);

insert into @Таблица
values
 (0, 0, 0, 0, 1, 'a'),
 (0, 0, 0, 0, null, 'a'),
 (0, 0, 0, 0, null, null),
 (0, 0, 0, 1, 2, 'b'),
 (0, 0, 0, 1, null, 'b'),
 (0, 0, 0, 1, null, null)

select top (1) with ties
 *
from
 @Таблица
order by
 row_number() over (
  partition by КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4
  order by (select count(*) from (values (cast(Поле1 as sql_variant)), (cast(Поле2 as sql_variant))) t(v)) desc
 );
А что делать с ситуацией, когда для одного сочетания КлючПоле1, КлючПоле2, КлючПоле3, КлючПоле4 есть несколько строк со всеми заполненными полями, пусть ТС сам придумывает.
20 мар 12, 14:20    [12281226]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить