Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 How to display rows in a single column

Author  Topic 

divyaram
Posting Yak Master

180 Posts

Posted - 2010-05-07 : 06:21:44
Hi all,


I have to fetched data from a table like this

BookNumber Sub_Aff_ID
3678 4099
3678 4111
3678 4112
3678 4113
3550 1001
3550 1002

But I want to show the result like this


BookNumber Sub_Aff_ID
3678 4099,4111,4112,4113
3550 1001,1002


My query is like this

select Book_Number,Sub_Aff_ID from Sub_Book_Affliation
order by Sub_Aff_ID



Regards,
Divya

pk_bohra
Master Smack Fu Yak Hacker

1182 Posts

Posted - 2010-05-07 : 06:47:04
Try this:

DECLARE @Sub_Book_Affliation TABLE (BookNumber INT, Sub_Aff_ID int)

INSERT @Sub_Book_Affliation
SELECT 3678, 4099 UNION ALL
SELECT 3678, 4111 UNION ALL
SELECT 3678, 4112 UNION ALL
SELECT 3678, 4113 UNION ALL
SELECT 3550, 1001 UNION ALL
SELECT 3550, 1002


-- Show the expected output
SELECT DISTINCT s1.BookNumber,
STUFF((SELECT DISTINCT TOP 100 PERCENT ',' + Cast(s2.Sub_Aff_ID as varchar)
FROM @Sub_Book_Affliation AS s2 WHERE s2.BookNumber = s1.BookNumber
ORDER BY ',' + Cast(s2.Sub_Aff_ID as varchar) FOR XML PATH('')), 1, 1, '') AS CODES
FROM @Sub_Book_Affliation AS s1
ORDER BY s1.BookNumber


Regards,
Bohra

I am here to learn from Masters and help new bees in learning.
Go to Top of Page

malpashaa
Constraint Violating Yak Guru

264 Posts

Posted - 2010-05-07 : 06:50:38
Refer to this article for more information:
[url]http://databases.aspfaq.com/general/how-do-i-concatenate-strings-from-a-column-into-a-single-row.html[/url]
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2010-05-07 : 09:23:26
quote:
Originally posted by pk_bohra

Try this:

DECLARE @Sub_Book_Affliation TABLE (BookNumber INT, Sub_Aff_ID int)

INSERT @Sub_Book_Affliation
SELECT 3678, 4099 UNION ALL
SELECT 3678, 4111 UNION ALL
SELECT 3678, 4112 UNION ALL
SELECT 3678, 4113 UNION ALL
SELECT 3550, 1001 UNION ALL
SELECT 3550, 1002


-- Show the expected output
SELECT DISTINCT s1.BookNumber,
STUFF((SELECT DISTINCT TOP 100 PERCENT ',' + Cast(s2.Sub_Aff_ID as varchar)
FROM @Sub_Book_Affliation AS s2 WHERE s2.BookNumber = s1.BookNumber
ORDER BY ',' + Cast(s2.Sub_Aff_ID as varchar) FOR XML PATH('')), 1, 1, '') AS CODES
FROM @Sub_Book_Affliation AS s1
ORDER BY s1.BookNumber


Regards,
Bohra

I am here to learn from Masters and help new bees in learning.


This will work from version 2005 onwards

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

ms65g
Constraint Violating Yak Guru

497 Posts

Posted - 2010-05-09 : 17:56:28
If number of items is limited and tiny you can use a set-based approach for achieving request like this:

DECLARE @T TABLE
(BookNumber int,
Sub_Aff_ID int,
UNIQUE (BookNumber, Sub_Aff_ID));

INSERT INTO @T (BookNumber, Sub_Aff_ID)
SELECT 3678, 4099 UNION
SELECT 3678, 4111 UNION
SELECT 3678, 4112 UNION
SELECT 3678, 4113 UNION
SELECT 3550, 1001 UNION
SELECT 3550, 1002

SELECT BookNumber,
MAX(CASE WHEN rec_id = 1 THEN CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 2 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 3 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 4 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 5 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 6 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 7 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 8 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) +
MAX(CASE WHEN rec_id = 9 THEN ', ' + CAST(Sub_Aff_ID AS VARCHAR(10)) ELSE '' END) AS list
FROM
(SELECT BookNumber,
Sub_Aff_ID,
(SELECT COUNT(*)
FROM @T
WHERE BookNumber = t.BookNumber
AND Sub_Aff_ID <= t.Sub_Aff_ID) AS rec_id
FROM @T AS t)D
GROUP BY BookNumber;

/*
BookNumber list
----------- ------------------------
3550 1001, 1002
3678 4099, 4111, 4112, 4113
*/
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2010-05-10 : 03:18:18
Also refer Quiry update method
http://beyondrelational.com/blogs/madhivanan/archive/2009/06/10/quirky-update-in-sql-server.aspx

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page

ms65g
Constraint Violating Yak Guru

497 Posts

Posted - 2010-05-10 : 06:22:11
quote:
Originally posted by madhivanan

Also refer Quiry update method
http://beyondrelational.com/blogs/madhivanan/archive/2009/06/10/quirky-update-in-sql-server.aspx

Madhivanan

Failing to plan is Planning to fail


Concatenating rows with assignment update! nice idea.
Could you please say me why do we call the assignmet update to 'quirky updet' ?
Go to Top of Page

madhivanan
Premature Yak Congratulator

22864 Posts

Posted - 2010-05-10 : 09:04:32
quote:
Originally posted by ms65g

quote:
Originally posted by madhivanan

Also refer Quiry update method
http://beyondrelational.com/blogs/madhivanan/archive/2009/06/10/quirky-update-in-sql-server.aspx

Madhivanan

Failing to plan is Planning to fail


Concatenating rows with assignment update! nice idea.
Could you please say me why do we call the assignmet update to 'quirky updet' ?


The updates take place with the help of incremental values of the variable

Madhivanan

Failing to plan is Planning to fail
Go to Top of Page
   

- Advertisement -