मेरे पास निम्नानुसार एक टेबल है

  OrderId   Carrier Truck   Trailer
  10001     ABC     TruckA  TrailerA
  10001     ABC     TruckA  TrailerA
  10001     ABC     TruckB  TrailerA
  10001     ABC     TruckC  TrailerB
  10001     ABC     TruckC  TrailerD

मेरी क्वेरी का आउटपुट सिंगल रो होना चाहिए

 OrderId   Carrier Truck   Trailer
 10001     ABC     NULL    NULL

तर्क को लागू करना होगा जैसे कि प्रत्येक कॉलम में एक ही मान होता है तो वह मान उस विशेष कॉलम में होना चाहिए अन्यथा यह शून्य होगा

मैंने नीचे दिए गए प्रश्नों की कोशिश की, लेकिन सही आउटपुट नहीं मिल रहा है

  SELECT 
        s.OrderId
       ,LEAD(s.OrderId,1) OVER (ORDER BY t.Code) AS PreviousOrderId
       ,c.LegalName AS CarrierName
       ,LEAD(c.LegalName,1) OVER (ORDER BY t.Code) AS PreviousCarrierName
       ,t.TruckLicensePlate
       ,LEAD(t.TruckLicensePlate,1) OVER (ORDER BY t.Code) AS PreviousTruckLicensePlate
       ,t.TrailerLicensePlate
       ,LEAD(t.TrailerLicensePlate,1) OVER (ORDER BY t.Code) AS PreviousTrailerLicensePlate
    INTO #tempResult
    FROM
       OrderDetails

    SELECT
        CASE WHEN t.OrderId = t.PreviousOrderId 
             THEN t.OrderId ELSE NULL END AS OrderId
        ,CASE WHEN t.CarrierName = t.PreviousCarrierName
             THEN t.CarrierName ELSE NULL END AS CarrierName
        ,CASE WHEN t.TruckLicensePlate = t.PreviousTruckLicensePlate
             THEN t.TruckLicensePlate ELSE NULL END AS TruckLicensePlate
        ,CASE WHEN t.TrailerLicensePlate = t.PreviousTrailerLicensePlate
             THEN t.TrailerLicensePlate ELSE NULL END AS TrailerLicensePlate
    from #tempResult  t
    order by orderid desc
0
Riyas 28 अगस्त 2020, 17:52

2 जवाब

सबसे बढ़िया उत्तर

ऐसा लगता है कि आप केवल CASE का उपयोग COUNT और MAX के साथ कर सकते हैं:

SELECT CASE COUNT(DISTINCT OrderID) WHEN 1 THEN MAX(OrderID) END AS OrderID,
       CASE COUNT(DISTINCT Carrier) WHEN 1 THEN MAX(Carrier) END AS Carrier,
       CASE COUNT(DISTINCT Truck) WHEN 1 THEN MAX(Truck) END AS Truck,
       CASE COUNT(DISTINCT Trailer) WHEN 1 THEN MAX(Trailer) END AS Trailer
FROM dbo.YourTable;
1
Larnu 28 अगस्त 2020, 17:55

तर्क को लागू करना होगा जैसे कि प्रत्येक कॉलम में एक ही मान होता है तो वह मान उस विशेष कॉलम में होना चाहिए अन्यथा यह शून्य होगा

एकत्रीकरण और सशर्त तर्क का प्रयोग करें। मुझे लगता है कि min() और max() की तुलना करना एक सीधा तरीका है:

select
    orderid,
    case when min(carrier) = max(carrier) then min(carrier) end carrier,
    case when min(truck)   = max(truck)   then min(carrier) end truck,
    case when min(trailer) = max(trailer) then min(carrier) end trailer
from orderdetails
group by orderid
4
GMB 28 अगस्त 2020, 17:55