Я пытаюсь создать простой запрос на время разработки, когда часы часов и часы отключены. БД записывает имя человека, если его синхронизация или выход и время. Он записывает более того, но мне не нужна эта информация.Однострочный подзапрос возвращает более одной строки в Oracle
Так пример DB будет:
Id | User | In_out | Date_Time
----------------------------------
2 | Bob | In | 13/Oct/16 9:30:35AM
3 | Ken | In | 13/Oct/16 9:34:27AM
4 | Jon | In | 13/Oct/16 9:34:46AM
5 | Billy | In | 13/Oct/16 9:52:06AM
6 | Bob | Out | 13/Oct/16 4:30:05PM
7 | Jon | Out | 13/Oct/16 4:32:55PM
Результат я хочу, чтобы вернуть в SQL является:
User | Time_In | Time_Out
-------------------------------
Bob | 9:30:35AM | 4:30:05PM
Jon | 9:34:46AM | 4:32:55PM
SQL, я стараюсь не прав, я знаю, что. Но что мне нужно изменить, чтобы получить результат, который я хочу?
SELECT
Clock.Checkin_Checkout.User,
Clock.Checkin_Checkout.In_Out,
(SELECT TO_CHAR(Clock.Checkin_Checkout.DATETIME, 'hh:mi:ss AM')
FROM Clock.Checkin_Checkout
WHERE Clock.Checkin_Checkout.In_Out = 'In') AS "Time In",
To_Char(Clock.Checkin_Checkout.Create_Datetime, 'hh:mi:ss AM') AS "Time Out"
FROM
Clock.Checkin_Checkout
WHERE
Clock.Checkin_Checkout.In_Out = 'Out'
AND Clock.Checkin_Checkout.Datetime >= '13/Oct/2016'
Это не простая проблема, если вы не можете гарантировать целостность данных. Как вы уверены, что каждый 'in' имеет ровно один« выход »и наоборот? –
Попробуйте использовать аналитические функции. Я считаю, что это лучший способ. – 0xdb