Объединить две строки данных SQL из запроса JOIN - PullRequest
0 голосов
/ 01 мая 2018

Я построил следующий запрос, который успешно запускает нужный мне отчет. Однако столбцы punch_in и punch_out не такие, как хотелось бы.

SELECT c.first_name as customer_name, ch.id as clean_home_id, sl.modified_date as punch_in,sl2.modified_date as punch_out, e.first_name as employee_name, ch.employee_id,isnull(chlog.timespent, 0) AS timespent
FROM clean_home_status_log sl
INNER JOIN clean_home ch on sl.clean_home_id = ch.id
INNER JOIN customer c on ch.customer_id = c.id
INNER JOIN employee e on ch.employee_id = e.id
INNER JOIN clean_home_status_log sl2 on sl.id = sl2.id 
Outer APPLY GetCleanHomeKeeperTime(ch.id) chlog
WHERE (sl.new_status = 8 or sl.new_status = 9) and (c.id = 26749) and CONVERT(DATE,sl.modified_date) >= '2017-11-01' order by clean_home_id

Производит:

Josh    82104   2017-11-01 14:16:21.947 2017-11-01 14:16:21.947 Lupe    1334    1.01
Josh    82104   2017-11-01 15:17:02.303 2017-11-01 15:17:02.303 Lupe    1334    1.01
Josh    82105   2017-11-02 14:23:35.803 2017-11-02 14:23:35.803 Lupe    1334    1
Josh    82105   2017-11-02 15:23:27.233 2017-11-02 15:23:27.233 Lupe    1334    1

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

Josh    82104   2017-11-01 14:16:21.947 2017-11-01 15:17:02.303 Lupe    1334    1.01

Показывает punch_in и punch_out время в одной строке

Чего мне не хватает?

1 Ответ

0 голосов
/ 01 мая 2018

С небольшой информацией, которую вы доставили, вот моя попытка:

SELECT 
    c.first_name as customer_name, 
    ch.id as clean_home_id,
    MIN(sl.modified_date) as punch_in,
    MAX(sl2.modified_date) as punch_out,
    e.first_name as employee_name,
    ch.employee_id,
    isnull(chlog.timespent, 0) AS timespent 
FROM clean_home_status_log sl 
INNER JOIN clean_home ch on sl.clean_home_id = ch.id 
INNER JOIN customer c on ch.customer_id = c.id 
INNER JOIN employee e on ch.employee_id = e.id 
INNER JOIN clean_home_status_log sl2 on sl.id = sl2.id 
Outer APPLY GetCleanHomeKeeperTime(ch.id) chlog 
WHERE (sl.new_status = 8 or sl.new_status = 9) and (c.id = 26749) and CONVERT(DATE,sl.modified_date) >= '2017-11-01' 
GROUP BY c.first_name, ch.id, e.first_name, ch.employee_id, isnull(chlog.timespent, 0)
order by clean_home_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...