0

次の 2 つの select ステートメントがあり、一致する必要がある Date 列に基づいて、テーブル内でエントリ時刻と終了時刻が隣り合っている状態でマージしたいと考えています。

     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 の結果 名前 姓 識別子 エントリ 終了日 アントネット コールマン 20045619 07:11:01:000 10/09/2013 アントネット コールマン 20045619 06:58:58:000 11/09/2013 アントネット コールマン 20045619 0:70:0 12/09/2013 アントネット コールマン 20045619 07:02:48:000 13/09/2013 アントネット コールマン 20045619 07:17:43:000 16/09/2013 アントネット コールマン 20045619 06:54:35:000 2013/17アントネット・コールマン 20045619 07:00:36:000 18/09/2013 アントネット・コールマン 20045619 06:57:33:000 19/09/2013

クエリ 2 の結果 名前 姓 識別子
エントリ 終了日 アントネット コールマン 20045619 16:09:39:000 10/09/2013 12/09/2013 アントネット コールマン 20045619 16:04:28:000 13/09/2013 アントネット コールマン 20045619 16:06:04:000 16/09/2013 アントネット コールマン 20045619 16:05:30:000 2013/17アントネット・コールマン 20045619 16:02:00:000 18/09/2013

4

2 に答える 2

1

おそらく 2 つの SELECT は必要ありません。WHERE 条件の唯一の違いは STR_DIRECTION です。CASE に移動するだけです。

   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) 
于 2013-09-19T11:28:46.937 に答える
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) 
于 2013-09-19T11:10:49.137 に答える