读书人

多条记录 做为一条记录 读出,该怎么处

发布时间: 2013-01-25 15:55:29 作者: rapoo

多条记录 做为一条记录 读出
News表:
ID Title [Date]
1 'ABCDE' 2012-3-1
2 'ABC' 2012-3-1

Category表:
ID CategoryName
1 '类型1'
2 '类型2'
3 '类型3'

CatNew表:
ID NewsID CategoryID
1 1 1
2 1 2
3 2 3
4 2 1


取出数据:
1 'ABCDE' 2012-3-1 类型1_类型2
2 'ABC' 2012-3-1 类型3_类型1


怎么写SQL呢, 求救
[解决办法]

--CREATE TABLE News(ID INT, Title varchar(10), [Date] date)
--INSERT INTO News
--SELECT 1, 'ABCDE' ,'2012-3-1'
--UNION ALL
--SELECT 2, 'ABC' , '2012-3-1'

--create TABLE Category(ID INT , CategoryName VARCHAR(10))
--INSERT INTO Category
--SELECT 1, '类型1'
--UNION ALL
--SELECT 2 , '类型2'
--UNION ALL
--SELECT 3, '类型3'

--create TABLE CatNew(ID INT , NewsID INT , CategoryID INT )
--INSERT INTO CatNew
--SELECT 1 , 1 , 1
--UNION ALL
--SELECT 2 , 1 , 2
--UNION ALL
--SELECT 3 , 2 , 3
--UNION ALL
--SELECT 4 , 2 , 1


WITH huang AS (
SELECT a.id,a.title,a.[date],c.CategoryName
FROM news a
INNER JOIN catnew b ON a.id = b.newsid
INNER JOIN category c ON b.categoryid = c.id
)
SELECT a.id,a.title ,
stuff((select '_'+CategoryName from huang b
where b.id=a.id and b.id=a.id
for xml path('')),1,1,'') 'CategoryName'
FROM huang a
GROUP BY a.id,a.title
/*
id title CategoryName
----------- ---------- ----------------------------------------------------------------------------------------------------------------
1 ABCDE 类型1_类型2
2 ABC 类型1_类型3



(2 行受影响)
*/

读书人网 >SQL Server

热点推荐