2016-11-29 9 views
5

मैंने अपनी समस्या का हल ढूंढने की कोशिश कर रहे हफ्तों के लिए उच्च और निम्न खोज की है।एक कॉलम के लिए प्रारंभ और समाप्ति कॉलम मर्ज करें

एक एक वाहन टेलीमेटरी प्रदाता से आरंभ और अंत समन्वय और तारीखों के साथ एक मेज है:

मेरे समस्या इस प्रकार है।

हमारे रिपोर्टिंग समाधान को साजिश करने में सक्षम होने के लिए मुझे इन्हें एक कॉलम में विलय करने की आवश्यकता है।

कुछ उदाहरण डेटा इस प्रकार है:

DECLARE @TblVar AS TABLE([ServiceID] INT 
        ,[StartDate] DATETIME 
        ,[StartLocation] VARCHAR(255) 
        ,[StartLat] FLOAT 
        ,[StartLong] FLOAT 
        ,[EndDate] DATETIME 
        ,[EndLocation] VARCHAR(255) 
        ,[EndLat] FLOAT 
        ,[EndLong] FLOAT); 
INSERT INTO @TblVar 

VALUES (48322, '2016-11-28 05:38:37.000','Weaver Road,Leicester',52.5753273,-1.306842,'2016-11-28 05:40:02.000','Earl Street,Leicester',52.5781,-1.3048711) 
     ,(48322, '2016-11-28 05:44:05.000','Earl Street,Leicester',52.5780996,-1.3048768,'2016-11-28 05:53:52.000','Arbor Road,Leicester',52.5533448,-1.2349645) 
     ,(48322, '2016-11-28 09:14:25.000','Arbor Road,Leicester',52.5533833,-1.2349445,'2016-11-28 09:15:54.000','Coventry Road,Leicester',52.5522865,-1.2370495) 
     ,(48322, '2016-11-28 09:16:05.000','Coventry Road,Leicester',52.552292,-1.2370598,'2016-11-28 09:20:41.000','Arbor Road,Leicester',52.553338,-1.2352033)  
     ,(48322, '2016-11-28 13:34:36.000','Arbor Road,Leicester',52.553388,-1.2352651,'2016-11-28 13:53:29.000','Narborough Road South,Leicester',52.597422,-1.1832976)  
     ,(48322, '2016-11-28 13:55:36.000','Narborough Road South,Leicester',52.597352,-1.183299,'2016-11-28 13:58:51.000','Hazel Drive,Leicester',52.6020946,-1.1760238) 
     ,(48322, '2016-11-28 14:11:53.000','Hazel Drive,Leicester',52.6020853,-1.1760053,'2016-11-28 14:24:40.000','Arbor Road,Leicester',52.5533118,-1.2352118) 
     ,(48322, '2016-11-28 14:29:48.000','Arbor Road,Leicester',52.5532741,-1.2352471,'2016-11-28 14:30:39.000','Coventry Road,Leicester',52.552955,-1.2363475) 
     ,(48322, '2016-11-28 14:32:24.000','Coventry Road,Leicester',52.552944,-1.2363491,'2016-11-28 14:34:06.000','Coventry Road,Leicester',52.5532598,-1.2350731) 
     ,(48322, '2016-11-28 14:50:12.000','Coventry Road,Leicester',52.5532646,-1.2351661,'2016-11-28 14:50:13.000','Coventry Road,Leicester',52.5532646,-1.2351661) 
     ,(48322, '2016-11-28 16:02:29.000','Coventry Road,Leicester',52.553156,-1.2348643,'2016-11-28 16:13:09.000','Earl Street,Leicester',52.5780946,-1.30486) 
     ,(48322, '2016-11-28 16:22:07.000','Earl Street,Leicester',52.5780776,-1.304851,'2016-11-28 16:23:26.000','Weaver Road,Leicester',52.5753643,-1.306814) 

कौन इस तरह दिखता है:

+-----------+-----------+---------------------+---------------------------------+------------+------------+ 
| ServiceID | PathOrder |  Date   |   Location    | Lattitude | Longitude | 
+-----------+-----------+---------------------+---------------------------------+------------+------------+ 
|  48322 |   1 | 28/11/2016 05:38:37 | Weaver Road,Leicester   | 52.5753273 | -1.306842 | 
|  48322 |   2 | 28/11/2016 05:40:02 | Earl Street,Leicester   | 52.5781 | -1.3048711 | 
|  48322 |   3 | 28/11/2016 05:44:05 | Earl Street,Leicester   | 52.5780996 | -1.3048768 | 
|  48322 |   4 | 28/11/2016 05:53:52 | Arbor Road,Leicester   | 52.5533448 | -1.2349645 | 
|  48322 |   5 | 28/11/2016 09:14:25 | Arbor Road,Leicester   | 52.5533833 | -1.2349445 | 
|  48322 |   6 | 28/11/2016 09:15:54 | Coventry Road,Leicester   | 52.5522865 | -1.2370495 | 
|  48322 |   7 | 28/11/2016 09:16:05 | Coventry Road,Leicester   | 52.552292 | -1.2370598 | 
|  48322 |   8 | 28/11/2016 09:20:41 | Arbor Road,Leicester   | 52.553338 | -1.2352033 | 
|  48322 |   9 | 28/11/2016 13:34:36 | Arbor Road,Leicester   | 52.553388 | -1.2352651 | 
|  48322 |  10 | 28/11/2016 13:53:29 | Narborough Road South,Leicester | 52.597422 | -1.1832976 | 
|  48322 |  11 | 28/11/2016 13:55:36 | Narborough Road South,Leicester | 52.597352 | -1.183299 | 
|  48322 |  12 | 28/11/2016 13:58:51 | Hazel Drive,Leicester   | 52.6020946 | -1.1760238 | 
|  48322 |  13 | 28/11/2016 14:11:53 | Hazel Drive,Leicester   | 52.6020853 | -1.1760053 | 
|  48322 |  14 | 28/11/2016 14:24:40 | Arbor Road,Leicester   | 52.5533118 | -1.2352118 | 
|  48322 |  15 | 28/11/2016 14:29:48 | Arbor Road,Leicester   | 52.5532741 | -1.2352471 | 
|  48322 |  16 | 28/11/2016 14:30:39 | Coventry Road,Leicester   | 52.552955 | -1.2363475 | 
|  48322 |  17 | 28/11/2016 14:32:24 | Coventry Road,Leicester   | 52.552944 | -1.2363491 | 
|  48322 |  18 | 28/11/2016 14:34:06 | Coventry Road,Leicester   | 52.5532598 | -1.2350731 | 
|  48322 |  19 | 28/11/2016 14:50:12 | Coventry Road,Leicester   | 52.5532646 | -1.2351661 | 
|  48322 |  20 | 28/11/2016 14:50:13 | Coventry Road,Leicester   | 52.5532646 | -1.2351661 | 
|  48322 |  21 | 28/11/2016 16:02:29 | Coventry Road,Leicester   | 52.553156 | -1.2348643 | 
|  48322 |  22 | 28/11/2016 16:13:09 | Earl Street,Leicester   | 52.5780946 | -1.30486 | 
|  48322 |  23 | 28/11/2016 16:22:07 | Earl Street,Leicester   | 52.5780776 | -1.304851 | 
|  48322 |  24 | 28/11/2016 16:23:26 | Weaver Road,Leicester   | 52.5753643 | -1.306814 | 
+-----------+-----------+---------------------+---------------------------------+------------+------------+ 

कोई भी विचार/कोड होगा:

+-----------+---------------------+---------------------------------+------------+------------+---------------------+---------------------------------+------------+------------+ 
| ServiceID |  StartDate  |   StartLocation   | StartLat | StartLong |  EndDate  |   EndLocation   | EndLat | EndLong | 
+-----------+---------------------+---------------------------------+------------+------------+---------------------+---------------------------------+------------+------------+ 
|  48322 | 28/11/2016 05:38:37 | Weaver Road,Leicester   | 52.5753273 | -1.306842 | 28/11/2016 05:40:02 | Earl Street,Leicester   | 52.5781 | -1.3048711 | 
|  48322 | 28/11/2016 05:44:05 | Earl Street,Leicester   | 52.5780996 | -1.3048768 | 28/11/2016 05:53:52 | Arbor Road,Leicester   | 52.5533448 | -1.2349645 | 
|  48322 | 28/11/2016 09:14:25 | Arbor Road,Leicester   | 52.5533833 | -1.2349445 | 28/11/2016 09:15:54 | Coventry Road,Leicester   | 52.5522865 | -1.2370495 | 
|  48322 | 28/11/2016 09:16:05 | Coventry Road,Leicester   | 52.552292 | -1.2370598 | 28/11/2016 09:20:41 | Arbor Road,Leicester   | 52.553338 | -1.2352033 | 
|  48322 | 28/11/2016 13:34:36 | Arbor Road,Leicester   | 52.553388 | -1.2352651 | 28/11/2016 13:53:29 | Narborough Road South,Leicester | 52.597422 | -1.1832976 | 
|  48322 | 28/11/2016 13:55:36 | Narborough Road South,Leicester | 52.597352 | -1.183299 | 28/11/2016 13:58:51 | Hazel Drive,Leicester   | 52.6020946 | -1.1760238 | 
|  48322 | 28/11/2016 14:11:53 | Hazel Drive,Leicester   | 52.6020853 | -1.1760053 | 28/11/2016 14:24:40 | Arbor Road,Leicester   | 52.5533118 | -1.2352118 | 
|  48322 | 28/11/2016 14:29:48 | Arbor Road,Leicester   | 52.5532741 | -1.2352471 | 28/11/2016 14:30:39 | Coventry Road,Leicester   | 52.552955 | -1.2363475 | 
|  48322 | 28/11/2016 14:32:24 | Coventry Road,Leicester   | 52.552944 | -1.2363491 | 28/11/2016 14:34:06 | Coventry Road,Leicester   | 52.5532598 | -1.2350731 | 
|  48322 | 28/11/2016 14:50:12 | Coventry Road,Leicester   | 52.5532646 | -1.2351661 | 28/11/2016 14:50:13 | Coventry Road,Leicester   | 52.5532646 | -1.2351661 | 
|  48322 | 28/11/2016 16:02:29 | Coventry Road,Leicester   | 52.553156 | -1.2348643 | 28/11/2016 16:13:09 | Earl Street,Leicester   | 52.5780946 | -1.30486 | 
|  48322 | 28/11/2016 16:22:07 | Earl Street,Leicester   | 52.5780776 | -1.304851 | 28/11/2016 16:23:26 | Weaver Road,Leicester   | 52.5753643 | -1.306814 | 
+-----------+---------------------+---------------------------------+------------+------------+---------------------+---------------------------------+------------+------------+ 

मेरे वांछित आउटपुट इस प्रकार है बहुत प्राप्त किया।

धन्यवाद,

दान

+0

संकेत संघ का उपयोग करता है: आप दो बार के रूप में कई पंक्तियों का निर्माण करना चाहते हैं, तो एक का उपयोग दो पंक्तियों के साथ एक मेज के खिलाफ क्रॉस जॉइन। फिर बस एक कॉल स्टेटमेंट का उपयोग करें कि कौन से कॉलम पंक्तियों में जाते हैं। –

+0

सोच रहा था कि सीटीई इसे करने का एक और अधिक प्रभावी तरीका होगा। आपके संकेत पर पहेली होगी और मेरे निष्कर्ष पोस्ट करेंगे। धन्यवाद! –

+0

आपके पास अब से चुनने के लिए दो हैं :)। यह एक उच्च गुणवत्ता वाला सवाल है - एक सेटअप स्क्रिप्ट पोस्ट करने का प्रयास करने से समाधान उत्पन्न करना बहुत आसान हो जाता है! –

उत्तर

5

आप नीचे दिए गए का उपयोग कर वांछित परिणाम प्राप्त कर सकते हैं। आप क्रॉस का उपयोग मूल्य खंड के साथ लागू कर सकते हैं।

 SELECT A.SERVICEID, 
     ROW_NUMBER() OVER(PARTITION BY A.SERVICEID ORDER BY A.SERVICEID) AS PATHORDER, 
     B.* 
FROM @TBLVAR A 
     CROSS APPLY(
     VALUES 
       ([STARTDATE],[STARTLOCATION],[STARTLAT],[STARTLONG]), 
       ([ENDDATE],[ENDLOCATION],[ENDLAT],[ENDLONG]) 
      )B(DATE, LOCATION, LATTITUDE, LONGITUD) 
+1

कमाल मुझे यह पसंद है। –

+0

@ Nick.McDermaid धन्यवाद :) – Buddi

+1

पूरी तरह से काम करता है और बहुत ही सुरुचिपूर्ण है! इसे इस तरह से कभी नहीं देखा, और निश्चित रूप से भविष्य में इस विधि का उपयोग करेंगे !! –

0

मैं इस बारे में सोच क्या आप के बाद कर रहे हैं है:

SELECT 
ServiceID, 
DENSE_RANK() OVER(
      PARTITION BY ServiceID 
      ORDER BY CASE WHEN CJ.R=1 THEN [StartDate] ELSE EndDate END) PathOrder, 
CASE WHEN CJ.R=1 THEN [StartDate] ELSE EndDate END [Date], 
CASE WHEN CJ.R=1 THEN [StartLocation] ELSE [EndLocation] END [Location], 
CASE WHEN CJ.R=1 THEN [StartLat] ELSE [EndLat] END [Lat], 
CASE WHEN CJ.R=1 THEN [StartLong] ELSE [EndLong] END [Long] 
FROM @TblVar 
CROSS JOIN 
(SELECT 1 As R UNION ALL SELECT 2) CJ 
1

क्वेरी की तरह नीचे

SELECT ServiceID, ROW_NUMBER() over (order by StartDate) AS PathOrder, StartDate AS Date, StartLocation AS Location, StartLat AS Lattitude, StartLong AS Longitude 
FROM (SELECT ServiceID, StartDate, StartLocation, StartLat, StartLong 
FROM @TblVar 
UNION ALL 
SELECT ServiceID, EndDate, EndLocation, EndLat, EndLong 
FROM TblVar AS @TblVar_1) AS q1 
+0

कृपया कोड-टैग का उपयोग करें और बेहतर पठनीयता के लिए क्वेरी को प्रारूपित करें। – Seb

संबंधित मुद्दे