Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

शहर x और y के बीच कुल यात्रा घंटों की गणना कैसे करें और इसके विपरीत

प्रश्न

आप एक एयरलाइन कंपनी के लिए काम कर रहे हैं और आपको शहरों के बीच पायलट के यात्रा समय का एक डेटासेट प्राप्त हुआ है। आपको पारस्परिक निर्धारित करने और शहरों के बीच कुल यात्रा घंटे खोजने की आवश्यकता है। इसका मतलब है कि पायलट की शहर '1' से '2' और शहर '2' से '1' तक की यात्रा को एक माना जाना चाहिए और फिर कुल यात्रा घंटों की गणना की जानी चाहिए।

अपेक्षित आउटपुट प्राप्त करने के लिए SQL क्वेरी लिखें।

उत्तर

आइए पहले परीक्षण डेटा बनाएं।

--create test data
USE demo;

CREATE TABLE dbo.travel_detail (
    id int identity(1,1),
    from_city varchar(100),
    to_city varchar(100),
    travel_time_hours smallint
)
GO

INSERT INTO dbo.travel_detail values
    ('Oslo','Helsinki',125),
    ('Helsinki','Oslo',110),
    ('Stockholm','Oslo',132),
    ('Oslo','Stockholm',180),
    ('Copenhagen','Helsinki',148),
    ('Helsinki','Copenhagen',84),
    ('Stockholm','Copenhagen',116),
    ('Helsinki','Stockholm',124)
GO

SELECT * FROM dbo.travel_detail

--clean up
--USE demo;
--DROP TABLE dbo.travel_detail

वांछित परिणाम प्राप्त करने के लिए, आपको कुछ क्रम के आधार पर शहर के नामों को पंक्ति के भीतर स्वैप करना चाहिए। इसका मतलब है कि, आप from_city और to_city नामों को आरोही या अवरोही क्रम में क्रमबद्ध कर सकते हैं और फिर पहले शहर को city_1 के रूप में रख सकते हैं और दूसरा शहर_2 के रूप में। ऐसा करने के लिए, आप < . से कम का उपयोग कर सकते हैं या > . से अधिक from_city . पर ऑपरेटर और to_city

इस तरह आप travel_time_hours . को जोड़ पाएंगे city_1 . को समूहीकृत करके और city_2 .

--solution
USE demo;

select 
city_1,
city_2,
total_travel_hours = sum(travel_time_hours)
from (
    select 
    city_1 = case when from_city < to_city then from_city else to_city end,
    city_2 = case when from_city > to_city then from_city else to_city end,
    travel_time_hours
    from dbo.travel_detail
)x
group by city_1, city_2
order by city_1, city_2

यही वह समाधान है जिसके साथ मैं आया हूं। यदि आपने अन्य तरीके से आउटपुट हासिल किया है, तो मुझे टिप्पणियों में बताएं।

इन साक्षात्कार प्रश्नों को सीधे अपने इनबॉक्स में प्राप्त करने के लिए साइन अप करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'केवल पढ़ने के लिए' डेटाबेस को छोटा नहीं कर सकता | ऑलवेजऑन अवेलेबिलिटी ग्रुप का उपयोग करते हुए ट्रांजेक्शन लॉग को सिकोड़ें

  2. ')' के पास गलत सिंटैक्स GETDATE के साथ संग्रहित प्रक्रिया को बुला रहा है

  3. SQL सर्वर में DENSE_RANK () कैसे काम करता है

  4. SQL सर्वर में जॉइन का उपयोग करके तालिका अपडेट करें?

  5. एसक्यूएल सर्वर (टीएसक्यूएल) - क्या समानांतर में बयानों को EXEC करना संभव है?