अरे सब मेरे पास एक टेबल है कि जब मैं क्वेरी चलाता हूं तो मुझे ऐसा कुछ मिलता है:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
3  |68v3f-5kjd-46ee-586-5988 |10       |M6eR5w            |ShipG001      |10/19/2010
4  |ErR20-bvmd-0001-bGT-0O0O |100      |MRE101            |ShipG99       |01/01/2011

अब मैं जो करना चाहता हूं वह यह है:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
3  |                         |         |M6eR5w            |ShipG001      |10/19/2010
4  |                         |         |MRE101            |ShipG99       |01/01/2011

सभी डेटा इस पहली रिकॉर्ड पंक्ति पर मौजूद है जबकि निम्न पंक्तियों में केवल inv_... का अतिरिक्त डेटा है।

मुझे यह सारा डेटा मल्टीपोल इनर जॉइन टेबल और लेफ्ट जॉइन टेबल से मिल रहा है।

एक प्रश्न उदाहरण:

SELECT
   BL.ID                AS 'ID',
   BL.guid              AS 'The GUID',
   BL.qty               AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received' 
FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID
..........

मैं यह कैसे कर सकता हूँ?

अपडेट करें

अगर मेरे पास और रिकॉर्ड हैं जो एक अलग आईडी के हैं जो इस तरह दिखता है:

ID |The GUID                 |Quantity |Maint Part Number |Ship Group    |Date Received
-----------------------------------------------------------------------------------------
2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |68v3f-5kjd-46ee-586-5988 |10       |M6eR5w            |ShipG001      |10/19/2010
2  |ErR20-bvmd-0001-bGT-0O0O |100      |MRE101            |ShipG99       |01/01/2011
3  |68rGw-3567-0001-123-fG34 |5        |GRD2859           |ShipG1        |11/11/2012
3  |5879R-376T-FDSW-RT7-23FG |1005     |Sv22              |ShipG87       |04/19/2017

और अब @SQLChao से क्वेरी का उपयोग करते हुए ऐसा दिखता है:

2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |                         |         |M6eR5w            |ShipG001      |10/19/2010
2  |                         |         |MRE101            |ShipG99       |01/01/2011
3  |                         |         |GRD2859           |ShipG1        |11/11/2012
3  |                         |         |Sv22              |ShipG87       |04/19/2017

अब यह कैसा दिखना चाहिए:

2  |54219-8974-8702-852-5425 |50       |54VRT             |ShipG105      |06/08/2018
2  |                         |         |M6eR5w            |ShipG001      |10/19/2010
2  |                         |         |MRE101            |ShipG99       |01/01/2011
3  |68rGw-3567-0001-123-fG34 |5        |GRD2859           |ShipG1        |11/11/2012
3  |                         |         |Sv22              |ShipG87       |04/19/2017

ध्यान दें कि कैसे ID 3 पहले ID 2 की तरह सभी डेटा के साथ शुरू होता है और उसके बाद ही अन्य डेटा दिखाता है।

1
StealthRT 17 मई 2018, 00:35

2 जवाब

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

आप ROW_NUMBER() का उपयोग कर सकते हैं और यदि यह = 1 है तो डेटा वापस कर दें। वरना खाली छोड़ दो। मुझे सच में यकीन नहीं है कि आप अपना डेटा कैसे ऑर्डर कर रहे हैं इसलिए मैंने BL.ID का उपयोग किया। जरूरत पड़ने पर आप इसे किसी और चीज में बदल सकते हैं।

SELECT
   BL.ID                AS 'ID',
   CASE WHEN ROW_NUMBER() OVER (PARTITION BY BL.ID ORDER BY BL.ID ASC) = 1 THEN BL.guid ELSE '' END AS 'The GUID',
   CASE WHEN ROW_NUMBER() OVER (PARTITION By BL.ID ORDER BY BL.ID ASC) = 1 THEN BL.qty ELSE '' END AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received' 
FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID
..........
1
SQLChao 17 मई 2018, 15:57

ये कोशिश करें

;With myData as
(
SELECT
   BL.ID                AS 'ID',
   BL.guid              AS 'The GUID',
   BL.qty               AS 'Quantity',
   I.inv_maintPartNum   AS 'Maint Part Number',
   I.inv_ShipGrp        AS 'Ship Group',
   I.inv_DateRec        AS 'Date Received',
   ROW_NUMBER() Over (Partition By BL.ID Order By BL.ID) RowNo

FROM 
   BizLine              AS BL 
INNER JOIN inventory    AS I 
   ON BL.ID = I.ID

)
Select ID, IIF(RowNo = 1, [The GUID], ' ')  [The GUID], IIF(RowNo = 1, [Quantity], ' ') Quantity, [Maint Part Number], [Ship Group], [Date Received]
From myData

आपको उस रिकॉर्ड की पहचान करने के लिए विंडो फ़ंक्शन को संशोधित करने की आवश्यकता हो सकती है जिसके लिए आप पूर्ण डेटा चाहते हैं।

1
Tolu 17 मई 2018, 16:39