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

एक क्रॉस लागू में परिणामों को विभाजित करने के लिए सीटीई का उपयोग करना

हो सकता है कि आप इस तरह कुछ ढूंढ रहे हों (यह एक सरलीकृत संस्करण है, मैंने "पहचानकर्ता" के रूप में केवल पहला नाम और टिप्पणी_डेट का उपयोग किया है)। मैंने इस डेटा का उपयोग करके इसका परीक्षण किया और - फिलहाल - टेक्स्ट कॉलम को विभाजित करने के लिए अधिकतम लेन 50 इमेजिंग। युक्ति:comment_text डेटाटाइप को VARCHAR(500) में बदलें

DECLARE @Comments TABLE
(
    id INT NOT NULL IDENTITY PRIMARY KEY CLUSTERED,
    comment_date DATETIME NOT NULL,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    comment_title VARCHAR(50) NOT NULL,
    comment_text VARCHAR(500)
);

    INSERT INTO @Comments VALUES(CURRENT_TIMESTAMP, 'Bob', 'Example','Bob''s Comment', 'Text of Bob''s comment.');
    INSERT INTO @Comments VALUES(CURRENT_TIMESTAMP, 'Alice', 'Example','Alice''s Comment'
    , 'Text of Alice''s comment that is much longer and will need to be split over multiple rows aaaaaa bbbbbb cccccc ddddddddddd eeeeeeeeeeee fffffffffffff ggggggggggggg.');

WITH CTE AS (SELECT comment_date, first_name, '<Note>'+CAST( SUBSTRING(comment_text, 1, 50) AS VARCHAR(500)) +'</Note>'comment_text, 1 AS RN
             FROM @Comments 
             UNION ALL 
             SELECT A.comment_date, A.first_name, '<Text>'+CAST( SUBSTRING(A.comment_text, B.RN*50+1, 50) AS VARCHAR(500)) +'</Text>'AS comment_text, B.RN+1 AS RN
             FROM @Comments A 
             INNER JOIN CTE B ON A.comment_date=B.comment_date AND A.first_name=B.first_name 
            WHERE  LEN(A.comment_text) > B.RN*50+1                    
             )
SELECT A.comment_date, A.first_name, '<title>'+ comment_title+'</title>' AS markup  
FROM @Comments A
UNION ALL
SELECT B.comment_date, B.first_name, B.comment_text AS markup  
FROM  CTE B ;

आउटपुट:

    comment_date        first_name  markup
2017-07-07 14:30:51.117 Bob         <title>Bob's Comment</title>
2017-07-07 14:30:51.117 Alice       <title>Alice's Comment</title>
2017-07-07 14:30:51.117 Bob          <Note>Text of Bob's comment.</Note>
2017-07-07 14:30:51.117 Alice        <Note>Text of Alice's comment that is much longer and wi</Note>
2017-07-07 14:30:51.117 Alice        <Text>ll need to be split over multiple rows aaaaaa bbbb</Text>
2017-07-07 14:30:51.117 Alice        <Text>bb cccccc ddddddddddd eeeeeeeeeeee fffffffffffff g</Text>
2017-07-07 14:30:51.117 Alice        <Text>gggggggggggg.</Text>


  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 सर्वर स्कीमा क्या अच्छे हैं?

  2. तालिका संशोधित करें:'नल की अनुमति दें' विशेषता को शून्य से शून्य की अनुमति देने के लिए कैसे बदलें?

  3. जहां क्लॉज के साथ SQL सर्वर में एक txt फ़ाइल आयात करना

  4. एसएसआईएस को कॉलम नाम लिखने से फ्लैट फ़ाइल आउटपुट में कैसे रोकें?

  5. क्या स्थानीय चरों के लिए संग्रहीत कार्यविधि इनपुट पैरामीटर निर्दिष्ट करने से क्वेरी को अनुकूलित करने में मदद मिलती है?