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

एकाधिक तालिकाओं से एकाधिक पंक्तियों को संयोजित करें

सार के लिए धन्यवाद! स्कीमा और डेटा प्राप्त करने के लिए दांत खींचने से कहीं बेहतर है। :-) यदि आप इसे अपनी सारगर्भित क्वेरी में प्लग इन करते हैं तो आपको वे परिणाम दिखाई देने चाहिए जो आप चाहते हैं (ठीक है, बहुत करीब - नीचे देखें)।

DECLARE @SalesRepID INT, @SurgeonID INT, @LocationID INT;
SELECT @SalesRepID = 2, @SurgeonID = 1, @LocationID = 1;

;WITH x AS 
(
  SELECT CommissionPercent, Categories = STUFF((SELECT ', ' 
      + tCat.Category FROM #tCategories AS tCat 
      INNER JOIN #tCommissions AS tCom 
      ON tCat.CategoryID = tCom.CategoryID
      WHERE tCom.CommissionPercent = com.CommissionPercent
      FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') 
 FROM #tCommissions AS com
 WHERE SalesRepID = @SalesRepID
 AND SurgeonID = @SurgeonID
 AND LocationID = @LocationID
),
y AS
(
  SELECT s = RTRIM(CommissionPercent) + ' (' + Categories + ')' 
  FROM x GROUP BY CommissionPercent, Categories
)
SELECT Result = STUFF((SELECT ', ' + s FROM y 
  FOR XML PATH, TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '');

परिणाम आपके द्वारा मांगे गए परिणाम से थोड़ा अलग है, लेकिन आप CommissionPercent को खींचते समय स्ट्रिंग स्वरूपण लागू करके इसे ठीक कर सकते हैं।

Result
--------------------------------------------------------
0.05 (Shirts, Shoes, Dresses), 0.10 (Hats), 0.15 (Pants)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में लोअरकेस अक्षरों वाली पंक्तियों को वापस करने के 5 तरीके

  2. Sql केस स्टेटमेंट Sql IN के भीतर

  3. SqlCommand.ExecuteScalar रद्द करें

  4. SQL सर्वर 2008 स्प्लिट, सॉर्ट और मर्ज वैल्यू

  5. SQL सर्वर डेटाबेस का नाम बदलें