积极答复者
多个数据行,其中某一列的数据能否作为一列显示?

问题
答案
-
小弟了解您的意思了,請加入WHERE條件就好了哦! WHERE A.busid = B.busid
DECLARE @T1 AS TABLE ( busid NVARCHAR(20) , drivername NVARCHAR(20) , insurlistnum NVARCHAR(10) , insurchildname NVARCHAR(10) ); INSERT INTO @T1 ( busid , drivername , insurlistnum , insurchildname ) VALUES ( N'吉A30241' , N'高 明' , N'PICC12345' , N'死亡伤残赔偿' ) , ( N'吉A30241' , N'高 明' , N'PICC12345' , N'医疗费用赔偿' ) ,( N'吉A30241' , N'高 明' , N'PICC12345' , N'财产损失赔偿' ) ,( N'吉A99988' , N'高99988' , N'PICC99988' , N'财产损失赔偿' ); SELECT ', ' + insurchildname from @T1 WHERE busid = N'吉A99988' FOR XML PATH('') ; SELECT DISTINCT A.busid , A.drivername , A.insurlistnum , STUFF( (SELECT ', ' + insurchildname from @T1 B WHERE A.busid = B.busid FOR XML PATH('')), 1, 1, '') AS [险种] FROM @T1 A;
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已建议为答案 ThankfulHeartModerator 2012年3月1日 7:51
- 已标记为答案 Planet Element 2012年3月9日 1:32
全部回复
-
-
您好,请参考以下的资讯,Combine Multiple Rows into One Row using SQL Server
主要是靠:
SELECT ', ' + insurchildname from @T1 FOR XML PATH('')
DECLARE @T1 AS TABLE ( busid NVARCHAR(20) , drivername NVARCHAR(20) , insurlistnum NVARCHAR(10) , insurchildname NVARCHAR(10) ); INSERT INTO @T1 ( busid , drivername , insurlistnum , insurchildname ) VALUES ( N'吉A30241' , N'高 明' , N'PICC12345' , N'死亡伤残赔偿' ) , ( N'吉A30241' , N'高 明' , N'PICC12345' , N'医疗费用赔偿' ) ,( N'吉A30241' , N'高 明' , N'PICC12345' , N'财产损失赔偿' ); SELECT DISTINCT busid , drivername , insurlistnum , STUFF( (SELECT ', ' + insurchildname from @T1 FOR XML PATH('')), 1, 1, '') AS [险种] FROM @T1;
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已建议为答案 Neddy Ren 2012年2月20日 2:39
- 已标记为答案 Planet Element 2012年2月27日 1:24
- 取消答案标记 Planet Element 2012年3月1日 0:58
-
用这个SELECT ', ' + insurchildname from @T1 FOR XML PATH('')
语句,虽然样式上实现了。但还是存在问题。我写个复杂的SQL,查询结果虽然都正确返回。但是有些字段的值,确被第一条记录的对应值覆盖了。我现在是做车辆保险信息的。
一台车,有3种必保的类型:交强险,商业险,承运人险。交强和商业险有对应的险种,交强险固定3个,而商业险因车而异,但是有10个。也就是说一台车,可能对应3个保险公司,3种类型的保单,3个有效期,3~13个险种。我这样设计的表问题么?保期都是1年制。添加信息时候,我想根据截至日期写一个过保提醒日期方法。例如:20120131-20130130。提醒日期提前结束日期一个月,但月份大小,可能跨年,可能不跨年。这个方法没思路。
我一次对3个表添加记录,而显示只要求显示交强险的信息。
现在险种和保额和那列,实质被覆盖了。我的SQL
SELECT A.ID AS SQLID,B.BUSID AS BUSID,D.DRIVERNAME AS DRIVERNAME,A.INSURLISTNUM AS INSURLISTNUM, STUFF((select','+A.INSURCHILDNAME from s_pub_InsurChildInfo A LEFT JOIN s_pub_InsurInfoAndChild B ON A.ID=B.CHILDID where INSURINFOID='1001' for XML PATH('')),1,1,'') as '险种', (SELECT SUM(CAST(INSURCOST AS FLOAT)) FROM s_pub_InsurInfoAndBus ) AS INSURCOSTSUM, (A.STARDATE+'至'+A.ENDDATE) AS '有效期' FROM s_pub_InsurInfoAndBus A LEFT JOIN s_pub_InsurAndBus B ON A.BUSINFOMAINID=B.ID LEFT JOIN s_pub_InsurChildInfo C ON C.ID=A.TYPEID LEFT JOIN S_pub_busdriver d on D.BUSID=B.BUSID WHERE TYPEID='1001'
-
小弟了解您的意思了,請加入WHERE條件就好了哦! WHERE A.busid = B.busid
DECLARE @T1 AS TABLE ( busid NVARCHAR(20) , drivername NVARCHAR(20) , insurlistnum NVARCHAR(10) , insurchildname NVARCHAR(10) ); INSERT INTO @T1 ( busid , drivername , insurlistnum , insurchildname ) VALUES ( N'吉A30241' , N'高 明' , N'PICC12345' , N'死亡伤残赔偿' ) , ( N'吉A30241' , N'高 明' , N'PICC12345' , N'医疗费用赔偿' ) ,( N'吉A30241' , N'高 明' , N'PICC12345' , N'财产损失赔偿' ) ,( N'吉A99988' , N'高99988' , N'PICC99988' , N'财产损失赔偿' ); SELECT ', ' + insurchildname from @T1 WHERE busid = N'吉A99988' FOR XML PATH('') ; SELECT DISTINCT A.busid , A.drivername , A.insurlistnum , STUFF( (SELECT ', ' + insurchildname from @T1 B WHERE A.busid = B.busid FOR XML PATH('')), 1, 1, '') AS [险种] FROM @T1 A;
亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
- 已建议为答案 ThankfulHeartModerator 2012年3月1日 7:51
- 已标记为答案 Planet Element 2012年3月9日 1:32