Skip to posts
  • Publications
  • Code Library
  • Events
  • Presentations
  • Who Am I?
  • Copyright

Wayne Sheffield

My blog about SQL Server
  • Home
  • Publications
  • Code Library
  • Events
  • Presentations
  • Who Am I?
  • Copyright
  • Latest Posts
  • Latest Comments


MCM


MVP

(2017-2022)

Top 50 SQL blog 2018

Recent Posts

  • Availability Group issues fixed with Alerts
  • Using Google Chrome with SSRS
  • Speakers wanted for the Richmond (VA) SQL Server Users Group – 2020
  • T-SQL Tuesday #120 – Recap
  • T-SQL Tuesday #120 – What were you thinking? – Invitation

Top Posts

  • Using Google Chrome with SSRS
  • Automating DBCC DBTABLE - obtaining the disk Sector Size
  • Dealing with orphaned users
  • The Murder Train is making a stop in Virginia Beach
  • Working with the registry from within SQL Server
  • Checking for temporary table existence
  • Speakers wanted for Richmond (VA) SQL Server Users Group - 2019
  • Understanding Rebinds and Rewinds
  • Advent of Code 2018 - Day 4 (Repose Record)
  • Interview Questions - what to ask the company interviewing you

Archives

Categories

Tags

2020 absolute values (ABS()) Advanced Certifications analytic functions assign sequential number automation Availability Group Back To Basics case-sensitive CLR String Security clustered index common table expression Data Movement deadlock analysis Denali Double-Hop efficiency extracting data from strings Failover Functions Google Chrome import file index analysis myth order by Performance physical tally table Quirky Update Scalar UDF Inlining split string splitting strings SQL SQL 2019 SQL Server SSMS SSMS Tips SSRS String Splitter T-SQL Tuesday tally table Trusted Assembly TSQL Tuesday virtual tally table Why do you do what you do? wrapup

Blogroll

  • Phil Factor
  • Steve Jones
  • Kendra Little
  • Adam Machanic
  • Paul White
  • Jorge Segarra
  • Jack Corbett
  • Aaron Bertrand
  • Tim Ford
  • Rob Farley
  • Jason Brimhall
  • Lynn Pettis
  • Gail Shaw
  • Gianluca Sartori
  • Robert Pearl

Grouped Delimited Lists

1
See <a title="Creating a comma-separated list" href="//www.sqlservercentral.com/articles/comma+separated+list/71700/" target="_blank">Creating a comma-separated list (SQL Spackle)</a> for explanation of how this works.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
-- Conditionally drop the test table to make reruns easier.
IF OBJECT_ID('tempdb..#TestData','U') IS NOT NULL
   DROP TABLE #TestData;
CREATE TABLE #TestData (AccountNumber INT,
                        Value CHAR(3));
 
-- Build 1000 account numbers with random 3 character data.
WITH TENS (N) AS (SELECT 0 UNION ALL SELECT 0 UNION ALL
                  SELECT 0 UNION ALL SELECT 0 UNION ALL
                  SELECT 0 UNION ALL SELECT 0 UNION ALL
                  SELECT 0 UNION ALL SELECT 0 UNION ALL
                  SELECT 0 UNION ALL SELECT 0),
THOUSANDS (N) AS (SELECT 1
                    FROM TENS t1
                         CROSS JOIN TENS t2
                         CROSS JOIN TENS t3),
MILLIONS (N)  AS (SELECT 1
                    FROM THOUSANDS t1
                         CROSS JOIN THOUSANDS t2),
TALLY (N)    AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0))
                   FROM MILLIONS)
INSERT INTO #TestData
SELECT TOP (100000)
      AccountNumber = CASE WHEN (N%1000) = 0 THEN 1000
                      ELSE N%1000
                      END,
      VALUE = CHAR(CONVERT(INT,RAND(CHECKSUM(NEWID()))*10)+64)
            + CHAR(CONVERT(INT,RAND(CHECKSUM(NEWID()))*10)+64)
            + CHAR(CONVERT(INT,RAND(CHECKSUM(NEWID()))*10)+64)
  FROM TALLY;
-- Add a clustered index to the table
CREATE CLUSTERED INDEX IX_#TestData_Cover
    ON #TestData (AccountNumber, Value);
 
;WITH CTE AS
(
SELECT DISTINCT AccountNumber FROM #TestData
)
SELECT AccountNumber,
       CommaList = STUFF((SELECT ',' + Value
                            FROM #TestData
                           WHERE AccountNumber = CTE.AccountNumber
                           ORDER BY Value
                             FOR XML PATH(''), TYPE)
                         .value('.','varchar(max)')
                         ,1,1,'')
  FROM CTE
ORDER BY AccountNumber;

1
 

1
 

Share this:

  • Share on X (Opens in new window) X
  • Share on LinkedIn (Opens in new window) LinkedIn
  • Email a link to a friend (Opens in new window) Email
  • Print (Opens in new window) Print
  • More
  • Share on Facebook (Opens in new window) Facebook
  • Share on Pinterest (Opens in new window) Pinterest
  • Share on Reddit (Opens in new window) Reddit

Like this:

Like Loading…
Powered by WordPress Web Design by SRS Solutions © 2026 Wayne Sheffield Design by SRS Solutions
Manage Cookie Consent
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
View preferences
  • {title}
  • {title}
  • {title}
%d