Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Здравствуйте

вот что выводит следующий селект:
SELECT PRESS,vcodemarka,datetreb from planing where ISNULL(press,'0')<>'0' ORDER by press asc,datetreb asc


и он сортирует так как мне нужно по datetreb :

+
1	341	2014-11-19 00:00:00.000
1	341	2014-11-19 00:00:00.000
10	694	2014-11-18 00:00:00.000
10	694	2014-11-26 00:00:00.000
14	689	2014-12-15 00:00:00.000
15	689	2014-12-10 00:00:00.000
16	194	2014-12-12 00:00:00.000
18	140	2014-12-15 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
20	15	2014-11-14 00:00:00.000
20	15	2014-11-18 00:00:00.000
22	37	2014-11-26 00:00:00.000
24	52	2014-11-20 00:00:00.000
24	206	2014-12-10 00:00:00.000
25	220	2014-11-25 00:00:00.000
26	20	2014-11-19 00:00:00.000
27	267	2014-11-05 00:00:00.000
28	69	2014-11-25 00:00:00.000
3	341	2014-11-18 00:00:00.000
3	341	2014-11-18 00:00:00.000
3	660	2014-11-26 00:00:00.000
3	660	2014-11-26 00:00:00.000
3	660	2014-11-26 00:00:00.000
3	660	2014-11-26 00:00:00.000
30	13	2014-12-08 00:00:00.000
30	13	2015-01-26 00:00:00.000
31	220	2014-11-25 00:00:00.000
31	220	2014-11-25 00:00:00.000
32	206	2014-11-19 00:00:00.000
32	206	2014-11-26 00:00:00.000
33	694	2014-11-18 00:00:00.000
34	52	2014-11-20 00:00:00.000
35	206	2014-11-26 00:00:00.000
38	586	2014-11-10 00:00:00.000
39	8	2014-11-11 00:00:00.000
4	13	2014-11-19 00:00:00.000
40	220	2014-11-25 00:00:00.000
42	1	2014-11-24 00:00:00.000
42	604	2014-11-26 00:00:00.000
43	694	2014-11-18 00:00:00.000
43	52	2014-12-10 00:00:00.000
44	206	2014-11-19 00:00:00.000
45	52	2014-12-10 00:00:00.000
45	52	2014-12-10 00:00:00.000
45	52	2014-12-10 00:00:00.000
45	52	2014-12-10 00:00:00.000
48	220	2014-11-19 00:00:00.000
48	220	2014-11-19 00:00:00.000
49	220	2014-11-19 00:00:00.000
8	256	2014-11-25 00:00:00.000


Однако потом мне нужно сделать следующее:

SELECT distinct PRESS,vcodemarka from planing where ISNULL(press,'0')<>'0' ORDER by press asc


и этот запрос выдаёт следующее:

+
1	341
10	694
14	689
15	689
16	194
18	140
2	660
20	15
22	37
24	52
24	206
25	220
26	20
27	267
28	69
3	341
3	660
30	13
31	220
32	206
33	694
34	52
35	206
38	586
39	8
4	13
40	220
42	1
42	604
43	52
43	694
44	206
45	52
48	220
49	220
8	256


Обратите внимание что на press=43 поменялись местами vcodemarka 52 стала выше чем 694, а это не верно, так как видно из предыдущего селекта нужно что бы было 694, а потом 52

Вопрос: как это сделать?

Сообщение было отредактировано: 19 ноя 14, 13:33
14 ноя 14, 07:53    [16843831]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
Klemzig
Guest
R-Magistr,

SELECT PRESS, vcodemarka
from planning
where ISNULL(press,'0')<>'0'
group by PRESS, vcodemarka
ORDER by press asc, min(datetreb)
14 ноя 14, 08:06    [16843852]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Klemzig
R-Magistr,

SELECT PRESS, vcodemarka
from planning
where ISNULL(press,'0')<>'0'
group by PRESS, vcodemarka
ORDER by press asc, min(datetreb)



Изумлённо восхищённый взгляд на тебя о великий ))))) Спасибо )))))
14 ноя 14, 08:09    [16843854]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Зачем там ISNULL()?
14 ноя 14, 10:01    [16844247]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
aleks2
Guest
iap
Зачем там ISNULL()?

Он еще не достиг просветленья.
14 ноя 14, 11:15    [16844768]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

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

потому что так надо, проверка же это, некоторые поля могут быть нул, а некоторые 0, нам и те и те не нужны, одним действием двух зайцев
18 ноя 14, 06:11    [16862817]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

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

А почему там не должно быть isnull() или что там должно быть?
18 ноя 14, 06:11    [16862818]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
Klemzig
Guest
R-Magistr
aleks2,

потому что так надо, проверка же это, некоторые поля могут быть нул, а некоторые 0, нам и те и те не нужны, одним действием двух зайцев
В таком случае, достаточно одной таблетки:
where press != '0'
Эффект будет такой же, если только у вас там дуриком не выставлено
set ansi_nulls off;
В БД обычно троичная логика, а не двоичная.
18 ноя 14, 07:47    [16862884]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Klemzig
R-Magistr
aleks2,

потому что так надо, проверка же это, некоторые поля могут быть нул, а некоторые 0, нам и те и те не нужны, одним действием двух зайцев
В таком случае, достаточно одной таблетки:
where press != '0'
Эффект будет такой же, если только у вас там дуриком не выставлено
set ansi_nulls off;
В БД обычно троичная логика, а не двоичная.


Я целенаправленно отошёл от троичной логики, а что делать если press таки = null и этот null ещё прикидывается чем-нибудь?
18 ноя 14, 11:21    [16863907]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8584
set ansi_nulls off будет убрано по обещаниям MS.
18 ноя 14, 12:06    [16864330]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Klemzig
если только у вас там дуриком не выставлено
set ansi_nulls off;
Как Вы объясните результат вот этого скрипта:
IF OBJECT_ID(N'tempdb..#T','U') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(F INT NULL);
INSERT #T(F)VALUES(33),(0),(NULL),(28);
SET ANSI_NULLS OFF;
SELECT * FROM #T WHERE F<>0;
IF OBJECT_ID(N'tempdb..#T','U') IS NOT NULL DROP TABLE #T;
?
18 ноя 14, 12:37    [16864622]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
Klemzig
Guest
iap,

Согласен, нагнал - уже не помню, как оно работает в этом режиме, тестировал на переменных вместо таблиц, вот и вылезло...
R-Magistr
Я целенаправленно отошёл от троичной логики
Это вам так кажется. В конечном итоге придет понимание, что троичность - на самом деле благо, а не проклятие. Но, конечно, для этого нужно смотреть на нее с точки зрения языка, который ее полностью поддерживает.
19 ноя 14, 02:15    [16869099]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
iap
Member

Откуда: Москва
Сообщений: 47085
Klemzig
iap,

Согласен, нагнал - уже не помню, как оно работает в этом режиме, тестировал на переменных вместо таблиц, вот и вылезло...
Всё очень просто. SET ANSI_NULLS {ON/OFF}; влияет только на явное сравнение с литеральным NULL или с переменной, значение которой NULL.
Ни того, ни другого здесь нет.

Было бы, например, WHERE F <> NULL, - тогда Вы были бы правы.
19 ноя 14, 13:05    [16871158]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
Klemzig
R-Magistr,

SELECT PRESS, vcodemarka
from planning
where ISNULL(press,'0')<>'0'
group by PRESS, vcodemarka
ORDER by press asc, min(datetreb)


По аналогии пишу следующее:

DECLARE @vcode int
select @vcode=t.vcode from 
	(
	SELECT distinct top 1 s.datetask,s.vcode --,ss.press ,ss.zakazproizv ,ss.nomen ,ss.KARTPRESFORM
		from SMENTASK s (nolock)
			JOIN SMENTASKSPECS ss (nolock) ON s.VCODE=ss.pcode
		where (s.smena LIKE '%А%'
			or s.smena LIKE '%Б%'
			or s.smena LIKE '%В%')
			and NOT EXISTS (SELECT INORDERCUST from SMENTASKSPECS
								where pcode=s.vcode AND ISNULL(INORDERCUST,0)<>0) --не варились
		ORDER by s.datetask desc
	) t

SELECT row_number() over (PARTITION BY press ORDER BY ss.press asc,min(z.datetreb)) r
	,ss.press ,ss.codemarka
	FROM SMENTASKSPECS ss (nolock) 
		LEFT JOIN ZAKAZPROIZV z (nolock) ON ss.zakazproizv=z.vcode
	where ss.pcode=@vcode
	GROUP BY ss.press ,ss.codemarka
order by ss.press asc,min(z.datetreb)


Он мне выдаёт:

+
1	1	220
1	10	694
1	13	689
1	14	689
1	15	689
1	16	194
1	18	140
1	2	660
1	20	15
1	24	52
1	25	220
1	26	20
1	28	69
1	3	341
2	3	660
1	30	13
1	31	220
1	32	206
1	33	694
1	34	52
1	35	1
1	38	586
1	39	8
1	4	13
1	40	220
2	40	341
1	41	586
1	42	1
2	42	52
1	43	52
1	44	206
1	45	679
1	48	220
1	49/1	5
1	8	256


Хотя простой запрос в виде:

SELECT ss.press ,ss.codemarka,z.datetreb
	FROM SMENTASKSPECS ss (nolock) 
		LEFT JOIN ZAKAZPROIZV z (nolock) ON ss.zakazproizv=z.vcode
	where ss.pcode=@vcode


Выдаёт:

+
2	660	2014-11-10 00:00:00.000
3	341	2014-11-18 00:00:00.000
4	13	2014-11-19 00:00:00.000
8	256	2014-11-25 00:00:00.000
10	694	2014-11-18 00:00:00.000
13	689	2014-11-21 00:00:00.000
14	689	2014-12-15 00:00:00.000
15	689	2014-12-10 00:00:00.000
16	194	2014-12-12 00:00:00.000
18	140	2014-12-15 00:00:00.000
20	15	2014-11-18 00:00:00.000
25	220	2014-11-25 00:00:00.000
26	20	2014-11-19 00:00:00.000
28	69	2014-11-25 00:00:00.000
30	13	2015-01-26 00:00:00.000
31	220	2014-11-25 00:00:00.000
32	206	2014-11-26 00:00:00.000
38	586	2014-11-10 00:00:00.000
39	8	2014-11-11 00:00:00.000
40	220	2014-11-18 00:00:00.000
41	586	2014-11-10 00:00:00.000
44	206	2014-11-19 00:00:00.000
48	220	2014-11-19 00:00:00.000
1	220	2014-11-18 00:00:00.000
1	220	2014-11-18 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
2	660	2014-11-26 00:00:00.000
3	341	2014-11-18 00:00:00.000
3	660	2014-11-26 00:00:00.000
3	660	2014-11-26 00:00:00.000
24	52	2014-11-17 00:00:00.000
24	52	2014-11-20 00:00:00.000
24	52	2014-11-20 00:00:00.000
24	52	2014-11-20 00:00:00.000
24	52	2014-11-20 00:00:00.000
31	220	2014-11-25 00:00:00.000
33	694	2014-11-18 00:00:00.000
34	52	2014-11-20 00:00:00.000
34	52	2014-11-20 00:00:00.000
35	1	2014-11-21 00:00:00.000
35	1	2014-11-21 00:00:00.000
35	1	2014-11-21 00:00:00.000
35	1	2014-11-24 00:00:00.000
40	341	2014-11-20 00:00:00.000
40	341	2014-11-21 00:00:00.000
40	220	2014-11-25 00:00:00.000
42	1	2014-11-24 00:00:00.000
42	1	2014-11-24 00:00:00.000
42	52	2014-11-26 00:00:00.000
42	52	2014-12-10 00:00:00.000
43	52	2014-12-10 00:00:00.000
45	679	2014-11-18 00:00:00.000
48	220	2014-11-19 00:00:00.000
49/1	5	2014-12-31 00:00:00.000
49/1	5	2014-12-31 00:00:00.000
49/1	5	2014-12-31 00:00:00.000
49/1	5	2014-12-31 00:00:00.000


Из чего видно, что на 40-м прессе сначала должна идти codemarka 341, а потом 220, а в первом запросе видно что всё наоборот, почему? и как было бы правильно?

Модератор: Уважаемый R-Magistr. Заворачивайте, пожалуйста, свои портянки в тег spoiler. Спасибо.


Сообщение было отредактировано: 19 ноя 14, 13:35
19 ноя 14, 13:32    [16871407]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
R-Magistr,

Не, погнал, всё верно
19 ноя 14, 13:34    [16871428]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
R-Magistr
Member

Откуда:
Сообщений: 356
R-Magistr,

А где найти этот ТЕГ? я тут всё облазил - не нашёл :(:(
20 ноя 14, 06:25    [16875825]     Ответить | Цитировать Сообщить модератору
 Re: Решаем задачки ))))  [new]
Добрый Э - Эх
Guest
R-Magistr
R-Magistr,

А где найти этот ТЕГ? я тут всё облазил - не нашёл :(:(


Картинка с другого сайта.
20 ноя 14, 07:27    [16875853]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить