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

Откуда: Екб
Сообщений: 31
Блин убил уже целый день и не могу сделать (((
Есть несколько полей (datetime): data1, data2, data3 и им соответствуют data1_f, data2_f, data3_f. Нужно чтобы при сортировке учитывалась минимальная дата из полей data. При этом если какое либо поле data_f заполнено, то соответствующее поле data исключается из сортировки.

например, когда все data_f пусты, при помощи запроса получаем:

data1 data2 data3
19.06.2014 11.06.2014 23.06.2014
15.06.2014 13.06.2014 10.06.2014
08.06.2014 16.06.2014 25.06.2014

а надо чтобы было так:

data1 data2 data3 *для наглядности
08.06.2014 16.06.2014 25.06.2014 (08.06.2014)
15.06.2014 13.06.2014 10.06.2014 (10.06.2014)
19.06.2014 11.06.2014 23.06.2014 (11.06.2014)

если data1_f соответствующее 08.06.2014 (data1) заполнено, то должно быть:

data1 data2 data3 *для наглядности
15.06.2014 13.06.2014 10.06.2014 (10.06.2014)
19.06.2014 11.06.2014 23.06.2014 (11.06.2014)
08.06.2014 16.06.2014 25.06.2014 (16.06.2014) 08.06.2014 в сортировке не учитывается
29 июл 14, 14:49    [16371403]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
вы бы лучше структуру своих таблиц написали и запросы, что у вас не работают. а то ничего не понятно что у вас за : data1_f, data2_f, data3_f.
29 июл 14, 14:52    [16371422]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
запрос как раз выводит записи, где хотя бы одно поле data_f пустое
29 июл 14, 14:59    [16371481]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
tl81
запрос как раз выводит записи, где хотя бы одно поле data_f пустое

чего? несколько раз перечитал...автор, что нужно-то?
29 июл 14, 15:00    [16371493]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
так и не понял, что у вас за поля такие data_f
29 июл 14, 15:03    [16371529]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
тоже даты, вообщем поле data, это дата события планируемая, а data_f дата события фактическая. В таблице больше ничего особого и нет кроме нескольких полей для примечаний
29 июл 14, 15:07    [16371560]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
давайте и дальше будем угадывать структуру и содержимое ваших таблиц
29 июл 14, 15:08    [16371572]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
Konst_One
так и не понял, что у вас за поля такие data_f

чтобы сортировалось в нужном порядке, как в примере
29 июл 14, 15:09    [16371577]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
пкм на вашей табличке и Script table as > Create to
29 июл 14, 15:11    [16371592]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
icprog
Member

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

Если я правильно понял, то в лоб могу предложить заменить значения data, которые соответствуют data_f, каким-нибудь значением 31.12.9999.

И в запросе прилепите что-то типа:
CASE WHEN data1<datat2 and data1<data3 THEN data1 ELSE WHEN data2<data1 and data2<data3 THEN data2 ELSE WHEN data3<data1 and data3<data2 THEN data3 END
29 июл 14, 15:17    [16371636]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
я же написал структуру: поля id (счетчик), data1, data1_f, data2, data2_f, data3, data3_f, prim1, prim2, prim3
поля data.. и data.._f - datetime
поля prim.. - varchar(100)

запрос strIP = "SELECT * FROM dbo.T_data WHERE (Data1_f NOT IS NULL) and (Data2_f NOT IS NULL) and (Data3_f NOT IS NULL)
29 июл 14, 15:36    [16371802]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
Как-то так:

declare @t1 table (id int identity(1,1), f1 char, f2 char)
insert @t1 values ('1','2'),('3','4')
declare @t2 table (id int identity(1,1), f3 char, f4 char)
insert @t2 values ('1','0')


select t1.*, ca1.f1
from @t1 t1
left join @t2 t2 on t1.id = t2.id
cross apply (select min(fn1) f1 from (values (t1.f1),(t1.f2)) tbl1 (fn1) where not exists (select fn2 from (values (t2.f3), (t2.f4)) tbl2 (fn2) where tbl1.fn1=tbl2.fn2)) ca1
29 июл 14, 15:37    [16371809]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
icprog
tl81,

Если я правильно понял, то в лоб могу предложить заменить значения data, которые соответствуют data_f, каким-нибудь значением 31.12.9999.

И в запросе прилепите что-то типа:
CASE WHEN data1<datat2 and data1<data3 THEN data1 ELSE WHEN data2<data1 and data2<data3 THEN data2 ELSE WHEN data3<data1 and data3<data2 THEN data3 END


нет заменить нельзя, по умолчанию они пустые и как только нужное событие произошло, например у нас это пиление, кромление, сборка, то ставиться дата когда это произошло, и в дальнейшем при запросе эта запись не должна уже находится в верху
29 июл 14, 16:06    [16372011]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
сортируйте по синтетическому столбцу с таким условием CASE , что выше вам посоветовали
29 июл 14, 16:08    [16372025]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
простите я болею, может как то по татарски объяснил задачу )
правильный запрос (из Акцесса) strIP = "SELECT * FROM dbo.T_data WHERE (Data1_f IS NULL) or (Data2_f IS NULL) or (Data3_f IS NULL) Order By "дальше не знаю что"
29 июл 14, 16:09    [16372035]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
Konst_One
сортируйте по синтетическому столбцу с таким условием CASE , что выше вам посоветовали

а как если data_f нельзя заполнить, и запрос выбирает записи только где эти даты пустые. И дат на самом дете около 10, я упростил задачу для понимания
29 июл 14, 16:17    [16372102]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
что-то вы ещё больше запутали.
давайте вы выполните все рекомендации по оформлению сообщения, а потом продолжим
29 июл 14, 16:25    [16372163]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
icprog
Member

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

Т.е. таблица выглядит примерно так:

data1 data2 data3 data1_f data2_f data3_f
19.06.2014 11.06.2014 23.06.2014 null null null
08.06.2014 16.06.2014 25.06.2014 null 08.06.2014 null
15.06.2014 13.06.2014 10.06.2014 null null null

?

и результат должен быть следующий:
data1 data2 data3 dt
15.06.2014 13.06.2014 10.06.2014 10.06.2014
19.06.2014 11.06.2014 23.06.2014 11.06.2014
08.06.2014 16.06.2014 25.06.2014 16.06.2014

?
Я правильно понял?
29 июл 14, 16:33    [16372219]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
не знаю как еще объяснить ((
попробую еще раз.

Есть таблица с полями data1, data1_f, data2, data2_f и т.д.

Поля data.. уже заполнены, это даты, когда по плану должны быть совершены определенные операции, data1 на форме это дата распиловки, data2 это нанесение кромки и т.д.

Поля data.._f заполняются по факту, распилили деталь - поставили data1_f вручную, нанесли кромку - поставили data2_f

Запрос (из Акцесса) strIP = "SELECT * FROM dbo.T_data WHERE (Data1_f IS NULL) or (Data2_f IS NULL) or (Data3_f IS NULL) Order By ............... выбирает незаконченные заказы, раз даты фактические пустые, но нужно чтобы была сортировка как в первом посте, по всем полям data.. а не по какому то одному, учитывая при этом заполнены ли data.._f
29 июл 14, 16:45    [16372304]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
icprog
tl81,

Т.е. таблица выглядит примерно так:

data1 data2 data3 data1_f data2_f data3_f
19.06.2014 11.06.2014 23.06.2014 null null null
08.06.2014 16.06.2014 25.06.2014 null 08.06.2014 null
15.06.2014 13.06.2014 10.06.2014 null null null

?

и результат должен быть следующий:
data1 data2 data3 dt
15.06.2014 13.06.2014 10.06.2014 10.06.2014
19.06.2014 11.06.2014 23.06.2014 11.06.2014
08.06.2014 16.06.2014 25.06.2014 16.06.2014

?
Я правильно понял?


почти, data_f не обязательно из значений data, исключается не 08.06.2014 а 16.06.2014 data2 соответствует data2_f
29 июл 14, 16:50    [16372321]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
select
 t.*
from
 dbo.T_data t cross apply
 (
  select
   min(d.dt)
  from
   (
    select t.Data1 where t.Data1_f is null
    union all
    select t.Data2 where t.Data2_f is null
    union all
    ...
    select t.DataN where t.DataN_f is null
   ) a(dt)
 ) b(dt)
where
 (t.Data1_f is null) or (Data2_f is null) or (Data3_f is null)
order by
 b.dt;
Оно?
29 июл 14, 16:50    [16372323]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
tl81, мой пример и с NULL работает.
29 июл 14, 16:53    [16372343]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
invm
select
 t.*
from
 dbo.T_data t cross apply
 (
  select
   min(d.dt)
  from
   (
    select t.Data1 where t.Data1_f is null
    union all
    select t.Data2 where t.Data2_f is null
    union all
    ...
    select t.DataN where t.DataN_f is null
   ) a(dt)
 ) b(dt)
where
 (t.Data1_f is null) or (Data2_f is null) or (Data3_f is null)
order by
 b.dt;
Оно?


ругается что то "Не удалось привязать составной индификатор "d.dt""
29 июл 14, 17:22    [16372523]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
tl81
Member

Откуда: Екб
Сообщений: 31
Владислав Колосов,

попробую разобраться c case завтра, спасибо всем за помощь, завтра буду снова вас мучить )
29 июл 14, 17:26    [16372545]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с ORDER BY  [new]
invm
Member

Откуда: Москва
Сообщений: 9827
tl81
ругается что то "Не удалось привязать составной индификатор "d.dt""
Можно было и догадаться исправить d.dt на a.dt.
29 июл 14, 17:47    [16372645]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить