सवाल कॉलम को गठबंधन / संक्षिप्त करने के लिए समूह [डुप्लिकेट]


इस प्रश्न का उत्तर यहां दिया गया है:

मेरे पास एक सारणी है:

ID  User  Activity  PageURL  
 1  Me    act1      ab     
 2  Me    act1      cd     
 3  You   act2      xy     
 4  You   act2      st

मैं उपयोगकर्ता और गतिविधि द्वारा समूह करना चाहता हूं जैसे कि मैं कुछ इस तरह से समाप्त करता हूं:

User  Activity  PageURL  
Me    act1      ab, cd     
You   act2      xy, st

जैसा कि आप देख सकते हैं, कॉलम पेजURL को समूह के आधार पर अल्पविराम से अलग किया गया है।

वास्तव में किसी भी संकेतक और सलाह की सराहना करेंगे।


76
2018-03-01 09:42


मूल


आपको जिस फ़ंक्शन की आवश्यकता है उसे कॉल किया जाता है group_concat MySQL में। मुझे नहीं पता कि SQLServer में समतुल्य है या नहीं, तो आप यह प्रश्न देख सकते हैं: SQL सर्वर में SQL group_concat फ़ंक्शन। - Xavi López
यह उतना आसान नहीं है जितना आप सोच सकते हैं - stackoverflow.com/questions/194852/... - RobJohnson
एसक्यूएल मानकों द्वारा या तो मुश्किल नहीं है। अच्छा संदर्भ @RobJohnson - samthebrand


जवाब:


SELECT
     [User], Activity,
     STUFF(
         (SELECT DISTINCT ',' + PageURL
          FROM TableName
          WHERE [User] = a.[User] AND Activity = a.Activity
          FOR XML PATH (''))
          , 1, 1, '')  AS URLList
FROM TableName AS a
GROUP BY [User], Activity

144
2018-03-01 09:45



अच्छा! विस्तृत करने के लिए: आप उपयोग कर रहे हैं STUFF() concatenated PageUrl स्ट्रिंग के पहले अल्पविराम को हटाने के लिए। PageUrl स्ट्रिंग स्वयं का उपयोग करके बनाई गई है FOR XML PATH(), पुनर्प्राप्त पेजरल्स को संयोजित करने के लिए, एक खाली पथ के साथ। बहुत चालाक :) कुछ स्रोत: STUFF():  msdn.microsoft.com/en-us/library/ms188043.aspx  FOR XML:  simple-talk.com/sql/learn-sql-server/... - Deruijter
यह उपयोगकर्ता के प्रश्न का एक कुशल उत्तर है। हालांकि, यह एक बेहतर जवाब होगा यदि आप समझाएंगे कि क्वेरी में क्या हो रहा है और यह वास्तव में क्यों काम करता है। - Eric J.
उसी उपयोगकर्ता के लिए बार-बार पृष्ठ यूआरएल से बचने के लिए DISTINCT खंड जोड़ा गया - Rashmi Pandit
@RashmiPandit DISTINCT जोड़ने के लिए धन्यवाद - Rahul Nikate
यह प्रश्न हमेशा मेरे लिए क्यों ले रहा है? समय समाप्त हो रहा है। - samthebrand


एक अच्छा सवाल है। आपको बताना चाहिए कि इसे क्रैक करने में कुछ समय लगा। मेरा परिणाम यहाँ है।

DECLARE @TABLE TABLE
(  
ID INT,  
USERS VARCHAR(10),  
ACTIVITY VARCHAR(10),  
PAGEURL VARCHAR(10)  
)

INSERT INTO @TABLE  
VALUES  (1, 'Me', 'act1', 'ab'),
        (2, 'Me', 'act1', 'cd'),
        (3, 'You', 'act2', 'xy'),
        (4, 'You', 'act2', 'st')


SELECT T1.USERS, T1.ACTIVITY,   
        STUFF(  
        (  
        SELECT ',' + T2.PAGEURL  
        FROM @TABLE T2  
        WHERE T1.USERS = T2.USERS  
        FOR XML PATH ('')  
        ),1,1,'')  
FROM @TABLE T1  
GROUP BY T1.USERS, T1.ACTIVITY

6
2018-03-01 12:01



आपको जोड़ना चाहिए AND T1.ACTIVITY = T2.ACTIVITY आंतरिक क्वेरी में, अन्यथा आपको कुछ डेटा के लिए सही परिणाम नहीं मिलेगा। - Ogrish Man