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

Откуда:
Сообщений: 226
Sehr geehrte Damen un Herren

Приветствую

Я написал запрос, который находит разницу между примемом на работу двух сотрудников в секундах, минутах и часах!

Выглядит он следующим образом

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM (SELECT hiredate allen FROM emp
WHERE ename = 'ALLEN') x,
(SELECT hiredate ward FROM emp
WHERE ename = 'WARD') y
GO

---------------------------------------------
seks mins hours
172800 2880 48

Работает, считает.

Далее, я переделываю запрос

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM ( SELECT hiredate allen, hiredate ward
FROM emp
WHERE ename = 'ALLEN' AND ename = 'WARD'
) x

GO
однако результат пустые строки, и не понимаю почему
------------------------------------------
seks mins hours



Далее пытаюсь сделать запрос через самообъединение

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM ((SELECT hiredate allen FROM emp
WHERE ename = 'ALLEN') x
INNER JOIN
(SELECT hiredate ward FROM emp
WHERE ename = 'WARD') y
ON x.ename = y.ename)
GO

здесь я получаю ошибку на столбец ENAME Invalid column name ename, почему?
Заранее благодарю за объяснение в чем я косячу. На что обратить внимание, что я недопонимаю.
16 янв 19, 11:26    [21786502]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
dermama,

как одновременно ename может равняться и 'ALLEN' и 'WARD'??
Неужели не видите нарушение логики?
16 янв 19, 11:31    [21786507]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

1. CROSS JOIN
2. ename = 'ALLEN' AND ename = 'WARD' одновременно и то и то?
3. INNER JOIN + ENAME Invalid column name ename - ename выводить в SELECT если используете

ну и всё абсолютная ересь
16 янв 19, 11:31    [21786508]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1467
dermama
Далее, я переделываю запрос

...
SELECT hiredate allen, hiredate ward
      FROM emp
	  WHERE ename = 'ALLEN' AND ename = 'WARD'
...
16 янв 19, 11:32    [21786510]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
dermama
здесь я получаю ошибку на столбец ENAME Invalid column name ename, почему?
У вас COLLATE базы регистрозависимый? Поле-то, всё-таки, ENAME или ename?
16 янв 19, 11:34    [21786512]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
iap
dermama
здесь я получаю ошибку на столбец ENAME Invalid column name ename, почему?
У вас COLLATE базы регистрозависимый? Поле-то, всё-таки, ENAME или ename?
Да. Это я не по делу написал. Просто в подзапросе у вас такого поля нет, как уже сказали.
16 янв 19, 11:35    [21786516]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
dermama
Member

Откуда:
Сообщений: 226
SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM( SELECT hiredate allen, hiredate ward
FROM emp
WHERE ename = 'ALLEN' OR ename = 'WARD'
) x
GO

--------------------------------------------
seks mins hours
0 0 0
0 0 0



сделал OR и результат так же не радует.

C джойном стыдоба конечно вышла, решил быстро отредактировать....

переделал, однако также результат не радует

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM (SELECT e1.hiredate allen, e2.hiredate ward
FROM emp e1
INNER JOIN
emp e2
ON e1.empno = e2.empno
WHERE e1.ename = 'ALLEN'
OR e2.ename = 'WARD') x
GO

----------------------------------------

seks mins hours
0 0 0
0 0 0


что то я запутался совсем)
16 янв 19, 11:50    [21786532]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
dermama,

вы наугад пишете?

ON e1.empno = e2.empno
WHERE e1.ename = 'ALLEN'
OR e2.ename = 'WARD' x


равно ename = 'ALLEN' AND ename = 'WARD'
и равно бреду
16 янв 19, 11:52    [21786533]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
точнее не совсем так
ename = 'ALLEN' AND ename = 'WARD' => ename = 'ALLEN' AND ename = 'ALLEN' или второй вариант
16 янв 19, 11:53    [21786534]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
dermama
Member

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

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM (SELECT e1.hiredate allen, e2.hiredate ward
FROM emp e1
INNER JOIN
emp e2
ON e1.deptno = e2.deptno
WHERE e1.ename = 'ALLEN'
AND e2.ename = 'WARD') x

GO
----------------------------------------
seks mins hours
172800 2880 48

через INNER JOIN переделал, просто по номеру отдела сджойнил...
16 янв 19, 12:06    [21786555]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
256k
Member

Откуда: с.Торчилово, Псковская обл.
Сообщений: 437
dermama
TaPaK,

SELECT DATEDIFF(ss, allen, ward) seks,
DATEDIFF(mi, allen, ward) mins,
DATEDIFF(hh, allen, ward) hours
FROM (SELECT e1.hiredate allen, e2.hiredate ward
FROM emp e1
INNER JOIN
emp e2
ON e1.deptno = e2.deptno
WHERE e1.ename = 'ALLEN'
AND e2.ename = 'WARD') x

GO
----------------------------------------
seks mins hours
172800 2880 48

через INNER JOIN переделал, просто по номеру отдела сджойнил...


"Sehr geehrte Damen unD Herren"
16 янв 19, 13:53    [21786705]     Ответить | Цитировать Сообщить модератору
 Re: как же так?  [new]
dermama
Member

Откуда:
Сообщений: 226
256k,

Richtig, Ich bedanke Sie fuer ihre Bemerkung!
16 янв 19, 13:56    [21786712]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить