2013-09-19 2 views
0

У меня есть следующие 2 оператора выбора, которые я хотел бы объединить, имея время входа и выхода рядом друг с другом в таблице на основе столбца Date, который должен совпадать.Как слить/объединить 2 выбрать statemenst на основе условия

 SELECT NAME, SURNAME,IDENTIFIER, CONVERT(VARCHAR,(MIN(TRANSIT_DATE)),114) AS [ENTRY],'' AS  [EXIT], CONVERT(VARCHAR(10),TRANSIT_DATE,103)AS [DATE] 
    FROM [10.230.0.15].[SCAT].[dbo].[HA_TRANSIT] a 
    WHERE STR_DIRECTION = 'Entry' 
    and a.IDENTIFIER = '20045619' 
    AND STR_TRANSIT_STATUS = 'Granted' 
    AND TRANSIT_DATE BETWEEN @CompleteSDate AND @CompleteEDate 
    GROUP BY NAME, SURNAME,IDENTIFIER,CONVERT(VARCHAR(10),TRANSIT_DATE,103) 


SELECT NAME, SURNAME,IDENTIFIER, '' AS [ENTRY],CONVERT(VARCHAR,(MAX(TRANSIT_DATE)),114) AS [EXIT], CONVERT(VARCHAR(10),TRANSIT_DATE,103)AS [DATE] 
FROM [10.230.0.15].[SCAT].[dbo].[HA_TRANSIT] a 
WHERE STR_DIRECTION = 'Exit' 
and a.IDENTIFIER = '20045619' 
AND STR_TRANSIT_STATUS = 'Granted' 
AND TRANSIT_DATE BETWEEN @CompleteSDate AND @CompleteEDate 
GROUP BY NAME, SURNAME,IDENTIFIER,CONVERT(VARCHAR(10),TRANSIT_DATE,103) 

РЕЗУЛЬТАТЫ Запрос 1 Имя Фамилия ИДЕНТИФИКАТОР Вхождение Выход ДАТА Antonette Coleman 20045619 07: 11: 01: 000 10/09/2013 Antonette КОУЛМАН 20045619 06: 58: 58: 000 11/09/2013 ANTONETTE COLEMAN 20045619 07: 04: 27: 000 12/09/2013 ANTONETTE COLEMAN 20045619 07: 02: 48: 000 13/09/2013 ANTONETTE COLEMAN 20045619 07: 17: 43: 000 16/09/2013 ANTONETTE COLEMAN 20045619 06: 54: 35: 000 17/09/2013 ANTONETTE COLEMAN 20045619 07: 00: 36: 000 18/09/2013 ANTONETTE COLEMAN 20045619 06:57:33: 000 19/09/2013

РЕЗУЛЬТАТЫ Запрос 2 Имя Фамилия ИДЕНТИФИКАТОР Вхождение Выход
ДАТА Antonette Coleman 20045619 16: 09: 39: 000 10/09/2013 Antonette КОУЛМАН 20045619 16: 01: 19: 000 11/09/2013 ANTONETTE COLEMAN 20045619 16: 18: 49: 000 12/09/2013 ANTONETTE COLEMAN 20045619 16: 04: 28: 000 13/09/2013 ANTONETTE COLEMAN 20045619 16: 06: 04: 000 16/09/2013 Antonette КОУЛМАН 20045619 16: 05: 30: 000 17/09/2013 Antonette КОУЛМАН 20045619 16: 02: 00: 000 18/09/2013

ответ

1

Вам, вероятно, не нужны два SELECT, единственная разница в ваших WHERE-условиях - STR_DIRECTION. Просто переместите его в пеналы:

SELECT NAME, SURNAME,IDENTIFIER, 
     CONVERT(VARCHAR,(MIN(CASE WHEN STR_DIRECTION = 'Entry' THEN TRANSIT_DATE END)),114) AS [ENTRY], 
     CONVERT(VARCHAR,(MAX(CASE WHEN STR_DIRECTION = 'Exit' THEN TRANSIT_DATE END)),114) AS [EXIT], 
     CONVERT(VARCHAR(10),TRANSIT_DATE,103)AS [DATE] 
    FROM [10.230.0.15].[SCAT].[dbo].[HA_TRANSIT] a 
    WHERE STR_DIRECTION IN ('Entry', 'Exit') 
    AND a.IDENTIFIER = '20045619' 
    AND STR_TRANSIT_STATUS = 'Granted' 
    AND TRANSIT_DATE BETWEEN @CompleteSDate AND @CompleteEDate 
    GROUP BY NAME, SURNAME,IDENTIFIER,CONVERT(VARCHAR(10),TRANSIT_DATE,103) 
+0

Это похоже на то, что они ищут, но жалуется на неправильный синтаксис рядом ')' Кажется, что это не скобка, поскольку все они связаны ... – user1546143

+0

Я просто забыл о END в моих CASE. Получил мой ответ – dnoeth

0
SELECT NAME, SURNAME,IDENTIFIER, CONVERT(VARCHAR,(MIN(TRANSIT_DATE)),114) AS [ENTRY],''  AS  [EXIT], CONVERT(VARCHAR(10),TRANSIT_DATE,103)AS [DATE] 
    FROM [10.230.0.15].[SCAT].[dbo].[HA_TRANSIT] a 
    WHERE STR_DIRECTION = 'Entry' 
and a.IDENTIFIER = '20045619' 
AND STR_TRANSIT_STATUS = 'Granted' 
AND TRANSIT_DATE BETWEEN @CompleteSDate AND @CompleteEDate 
GROUP BY NAME, SURNAME,IDENTIFIER,CONVERT(VARCHAR(10),TRANSIT_DATE,103) 

UNION 

SELECT NAME, SURNAME,IDENTIFIER, '' AS [ENTRY],CONVERT(VARCHAR, (MAX(TRANSIT_DATE)),114) AS [EXIT], CONVERT(VARCHAR(10),TRANSIT_DATE,103)AS [DATE] 
FROM [10.230.0.15].[SCAT].[dbo].[HA_TRANSIT] a 
WHERE STR_DIRECTION = 'Exit' 
and a.IDENTIFIER = '20045619' 
AND STR_TRANSIT_STATUS = 'Granted' 
AND TRANSIT_DATE BETWEEN @CompleteSDate AND @CompleteEDate 
GROUP BY NAME, SURNAME,IDENTIFIER,CONVERT(VARCHAR(10),TRANSIT_DATE,103) 
+0

вы использовали Союз, чтобы объединить или объединить два или более двух операторов выбора – waqas

+0

Нет, вы не можете просто сделать союз, как и даты выхода и входа должны быть рядом друг с другом в 1 строка, если даты одинаковые – user1546143

Смежные вопросы