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

मैं SQL सर्वर में group_concat करना चाहता हूं

आपको शामिल होने का उदाहरण देने के लिए (इस मामले में एक स्वयं शामिल होता है, लेकिन सभी काम में शामिल होते हैं) और इसके लिए STUFF का उपयोग करते हैं। STUFF के अंदर WHERE क्लॉज पर ध्यान दें। यह वही है जो रिकॉर्ड को सही मानों से जोड़ता है।

declare @test table
(
email varchar(50),
address varchar(50)
)

insert into @test VALUES
('[email protected]','A123A'),  
('[email protected]','AB263'),   
('[email protected]','45632A'),   
('[email protected]','78YU'),
('[email protected]','6543D')

SELECT DISTINCT 
       email,
       Stuff((SELECT ', ' + address  
              FROM   @test t2 
              WHERE  t2.email  = t1.email  
              FOR XML PATH('')), 1, 2, '') Address
FROM   @test t1  

संपादित करें

ठीक है तो आप जो चाहते हैं (जो आप वास्तव में चाहते हैं, वह वास्तव में है):

declare @customers table
(
emailaddress varchar(50),
customerid int
)

insert into @customers VALUES
('[email protected]',1),  
('[email protected]',2)   

declare @orders table
(
orderid int,
customerid int,
orderdate date
)

insert into @orders VALUES
(1, 1, '2017-06-02'),
(2, 1, '2017-06-05'),
(3, 1, '2017-07-13'),
(4, 2, '2017-06-13')

declare @orderdetails table
(
id int,
orderid int,
productcode varchar(10)
)

insert into @orderdetails VALUES
(1, 1, 'apple pie'),
(2, 1, 'bread'),
(3, 2, 'custard'),
(4, 2, 'orange'),
(5, 3, 'orange'),
(6, 4, 'orange')

SELECT DISTINCT c.EmailAddress, productcode=
STUFF((SELECT ',' + odc.productcode FROM 
(SELECT DISTINCT emailaddress,productcode FROM 
@orders o2 inner join @orderdetails od2 on
o2.orderid = od2.orderid
inner join @customers c2 ON c2.customerid = o2.customerid) odc 
WHERE odc.emailaddress=c.emailaddress 
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM @OrderDetails od 
JOIN @Orders o ON od.OrderID = o.OrderID 
JOIN @Customers c ON c.CustomerID=o.CustomerID 
WHERE o.OrderDate BETWEEN '2016-01-01' AND getdate()

यहां बदलाव पर ध्यान दें। STUFF में सेलेक्ट अब एक सब-क्वेरी से है, ताकि आप ईमेल एड्रेस द्वारा ग्रुप कर सकें।

अतिरिक्त स्पष्टीकरण

आपका उद्देश्य ग्राहक द्वारा समूहीकृत उत्पाद कोड (ईमेल पते द्वारा दर्शाया गया) का संयोजन करना है। समस्या यह है कि उत्पाद कोड ऑर्डर विवरण तालिका में हैं और ईमेल पता ग्राहक तालिका में है, लेकिन ऐसा कोई क्षेत्र नहीं है जो दोनों को जोड़ता हो। ग्राहक तालिका का ऑर्डर तालिका के साथ एक से अनेक संबंध होता है और ऑर्डर तालिका का ऑर्डर विवरण तालिका के साथ एक से अनेक संबंध होता है। यह अमूर्तता का एक स्तर बहुत अधिक है। इसलिए हमें उत्पाद कोड और ईमेल पते के बीच एक सीधा लिंक प्रदान करके डेटाबेस को मदद करने की आवश्यकता है। यह हम सब-क्वेरी के माध्यम से करते हैं। मुझे आशा है कि यह आपके लिए इसे स्पष्ट करता है।




  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 सर्वर में DELETE और TRUNCATE तालिका के बीच अंतर

  2. दो पंक्तियों में दो मानों को स्विच करने के लिए SQL अद्यतन विवरण

  3. डुप्लिकेट होने पर पंक्ति मान को रिक्त स्ट्रिंग से बदलें

  4. SQL डिफ़ॉल्ट बाधा को उसका नाम जाने बिना कैसे छोड़ें?

  5. SQL सर्वर निष्पादन योजनाओं को कैसे पढ़ें और उनका विश्लेषण कैसे करें