如何写sql语句 [英] How to write the sql statement

查看:98
本文介绍了如何写sql语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



SQL,

Hi,

the SQL,

SELECT CONVERT(VARCHAR(10), TI_UTCTIME, 121)as [TRAVEL_DATE],
MIN(SUBSTRING(CONVERT(VARCHAR(23), TI_UTCTIME, 121), 1,16)) AS [START_TIME],
MAX(SUBSTRING(CONVERT(VARCHAR(23), TI_UTCTIME, 121), 1,16)) AS [STOP_TIME],
SD_STUDENTID as [STUDENT_ID],SD_STUDENTNAME as [STUDENT_NAME],
TI_DEVICEID as [DEVICE_ID]

FROM
 
(SELECT TI_UTCTIME,TI_DEVICEID,	TI_DATA
 FROM STS_TRAVELING_INFORMATION) AS T1
 
 JOIN
 
(SELECT SD_STUDENTID,SD_STUDENTNAME
 FROM STS_STUDENT_DETAILS_ WHERE SD_STUDENTNAME='Haseeb'
 AND SD_STUDENTCLASS='12') AS T2
 
 ON T1.TI_DATA LIKE '%'+T2.SD_STUDENTID
 WHERE TI_UTCTIME BETWEEN '2012-07-02' AND '2012-10-01'  
 GROUP BY CONVERT(VARCHAR(10), TI_UTCTIME, 121),TI_DEVICEID,SD_STUDENTID,SD_STUDENTNAME



检索表,如下所示,



retrieve the TABLE as below,

DATE        START_TIME           STOP_TIME        STUDENT_ID STUDENT_NAME DEVICE_ID
----        ----------           ---------        ---------- ---------    -------
2012-07-02 2012-07-02 11:07	2012-07-02 15:52   DT906	Haseeb	ST0001
2012-07-06 2012-07-06 18:45	2012-07-06 18:48   DT906	Haseeb	ST0001
2012-09-04 2012-09-04 12:35	2012-09-04 17:42   DT906	Haseeb	ST0001



SQL,



the SQL,

SELECT DATE,VRS_DEVICEID,LOCATION,TRAVEL_DATE FROM
(
    SELECT Row_number() over (
        PARTITION BY  SUBSTRING(CONVERT(VARCHAR(23), VRS_UTCTIME, 121),1,16)
        order by CONVERT(VARCHAR(10), VRS_UTCTIME, 121),VRS_DEVICEID,'('+VRS_LATITUDE+', '+VRS_LONGITUDE+')'
        ) as rowno,CONVERT(VARCHAR(10), VRS_UTCTIME, 121)as [TRAVEL_DATE],
         VRS_DEVICEID,'('+VRS_LATITUDE+', '+VRS_LONGITUDE+')' AS LOCATION,
    SUBSTRING(CONVERT(VARCHAR(23), VRS_UTCTIME, 121),1,16) AS DATE
    FROM STS_VEHICLE_RUNNING_STATUS
)AS T1
where rowno = 1



检索表,如下所示,



retrieve the TABLE as below,

 DATE                VRS_DEVICEID   LOCATION     TRAVEL DATE

2012-07-02 11:07       ST001        TVM           2012-07-02

2012-07-02 11:02       ST001        KANIYAPURAM    2012-07-02

2012-07-02 15:52       ST001        KOLLAM         2012-07-02

2012-07-06 18:45       ST001        KOTTAKKAL      2012-07-06

2012-07-06 18:45       ST001        CHANKUVETTI    2012-07-06

2012-07-06 18:48       ST001        MANNARKKAD     2012-07-06

2012-09-04 12:35       ST001        KERALA         2012-09-04


2012-09-04 14:42       ST001        MAVOOR         2012-09-04

2012-09-04 17:42       ST001        KOVALAM        2012-09-04


然后,我要合并下面的两个表,如下所示,


Then ,i want to combine above two table as below,

 DATE        START_TIME        STOP_TIME       STUDENT_ID  STUDENT_NAME DEVICE_ID ENTRY_LOC  EXIT_LOC
------      ------------       ---------       ---------   -----------  --------  ---------  --------
2012-07-02  2012-07-02 11:07  2012-07-02 15:53  DT906	    Haseeb	 ST0001    TVM       KOLLAM
2012-07-06  2012-07-06 18:45  2012-07-06 18:48  DT906	    Haseeb	 ST0001    KOTTAKKAL MANNARKKAD
2012-09-04  2012-09-04 12:35  2012-09-04 17:42  DT906	    Haseeb	 ST0001    KERALA    KOVALAM



也就是说,

比较第一个表中的START_TIME列和第二个表中的DATE列,然后
检索相应的LOCATION值,该值将作为
添加到第一张表中 ENRTY_LOC列.

比较第一个表中的STOP_TIME列与第二个表中的DATE列,然后
检索相应的LOCATION值,该值将作为
添加到第一张表中 EXIT_LOC列

谢谢..



That is,

compare the START_TIME column in first table with DATE column in 2nd table, then
retrieve the corresponding LOCATION value it add to 1st table as
ENRTY_LOC column.

compare the STOP_TIME column in first table with DATE column in 2nd table, then
retrieve the corresponding LOCATION value it add to 1st table as
EXIT_LOC column

Thanks..

推荐答案

easy:

easy:

SELECT DATE,VRS_DEVICEID,LOCATION,TRAVEL_DATE into #tempDevice FROM
(
    SELECT Row_number() over (
        PARTITION BY  SUBSTRING(CONVERT(VARCHAR(23), VRS_UTCTIME, 121),1,16)
        order by CONVERT(VARCHAR(10), VRS_UTCTIME, 121),VRS_DEVICEID,'('+VRS_LATITUDE+', '+VRS_LONGITUDE+')'
        ) as rowno,CONVERT(VARCHAR(10), VRS_UTCTIME, 121)as [TRAVEL_DATE],
         VRS_DEVICEID,'('+VRS_LATITUDE+', '+VRS_LONGITUDE+')' AS LOCATION,
    SUBSTRING(CONVERT(VARCHAR(23), VRS_UTCTIME, 121),1,16) AS DATE
    FROM STS_VEHICLE_RUNNING_STATUS
)AS T1
where rowno = 1
 
SELECT CONVERT(VARCHAR(10), TI_UTCTIME, 121)as [TRAVEL_DATE],
MIN(SUBSTRING(CONVERT(VARCHAR(23), TI_UTCTIME, 121), 1,16)) AS [START_TIME],
MAX(SUBSTRING(CONVERT(VARCHAR(23), TI_UTCTIME, 121), 1,16)) AS [STOP_TIME],
SD_STUDENTID as [STUDENT_ID],SD_STUDENTNAME as [STUDENT_NAME],
TI_DEVICEID as [DEVICE_ID]
into #tempStudentDevice
FROM
 
(SELECT TI_UTCTIME,TI_DEVICEID,	TI_DATA
 FROM STS_TRAVELING_INFORMATION) AS T1
 
 JOIN
 
(SELECT SD_STUDENTID,SD_STUDENTNAME
 FROM STS_STUDENT_DETAILS_ WHERE SD_STUDENTNAME='Haseeb'
 AND SD_STUDENTCLASS='12') AS T2
 
 ON T1.TI_DATA LIKE '%<'+T2.SD_STUDENTID
 WHERE TI_UTCTIME BETWEEN '2012-07-02' AND '2012-10-01'  
 GROUP BY CONVERT(VARCHAR(10), TI_UTCTIME, 121),TI_DEVICEID,SD_STUDENTID,SD_STUDENTNAME
 
select  sd.DATE,sd.START_TIME,sd.STOP_TIME,sd.STUDENT_ID,sd.STUDENT_NAME,
        sd.DEVICE_ID, 
		(
			SELECT x.Location From #tempDevice as x
			Where x.vrs_DEVICEID = sd.Device_ID
			AND		sd.[START_TIME] = x.Date
		)as ENTRY_LOC, 
		
		(
			SELECT x.Location From #tempDevice as x
			Where x.vrs_DEVICEID = sd.Device_ID
			AND		sd.[STOP_TIME] = x.Date 
		)
		as EXIT_LOC
from #tempstudentDevice as sd
JOIN #tempDevice as d on d.VRS_DEVICEID = sd.DEVICE_ID
  
 
drop table #tempDevice, #tempstudentDevice


这篇关于如何写sql语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆