-1

我想连接两个或多个字符串,并将它们显示在SQL Server 2008 R2中的一行记录中。如何连接SQL SERVER 2008 R2中的两个或更多字符串?

enter image description here

我所是,

shipsite|RatingMonth|Prior|Revised|Comments     | 
mopha |Nov 2012 | 1 | 2  |rating.element.manual.asn | 
mopha |Nov 2012 | 1 | 2  |rating.element.packaging | 
mopha |Nov 2012 | 1 | 2  |rating.element.asn.accuracy | 
mopha |Nov 2012 | 1 | 2  |rating.element.over.shipment| 
mopha |Nov 2012 | 1 | 2  |rating.element.cum.imbalance| 

我需要的是,

shipsite|RatingMonth|Prior|Revised|Comments     | 
mopha |Nov 2012 | 1 | 2  |rating.element.manual.asn | 
     |   |  |  |rating.element.packaging | 
     |   |  |  |rating.element.asn.accuracy | 
     |   |  |  |rating.element.over.shipment| 
     |   |  |  |rating.element.cum.imbalance| 

我不能使用任何逗号(,)或单引号(')或无连接操作中的特殊字符。所以你有什么想法。

我的示例查询,

select DISTINCT 
D30.SPGD30_SHIP_SITE_C As ShipSite, LEFT(DATENAME(MONTH, D30.SPGD30_RATING_MONTH_Y), 3) + ' ' + DATENAME(YEAR, D30.SPGD30_RATING_MONTH_Y) As RatingMonth, 
D30.SPGD30_PRIOR_SCORE_R As Prior, D30.SPGD30_REVISED_SCORE_R As Revised, 

case when SUBSTRING(D30.SPGD30_TRACKED_ADJUSTMENT_X,1,1)='D' then 'Dispute - '+D30.SPGD30_TRACKED_ADJUSTMENT_X -- 
when SUBSTRING(D30.SPGD30_TRACKED_ADJUSTMENT_X,1,1)='R' then 'Return Of Points - '+D30.SPGD30_TRACKED_ADJUSTMENT_X -- 
when (CHARINDEX('-',D30.SPGD30_TRACKED_ADJUSTMENT_X) > 0)then 'Score Calculation - '+CONVERT(VARCHAR(8), CAST(D30.SPGD30_TRACKED_ADJUSTMENT_X as DATETIME) , 1)--MM/DD/yy 

END AS Adjustments, 
J02.SPGJ02_MSG_CODE_X As Comments, 
--D31.SPGA04_RATING_ELEMENT_D As Comments, 
D30.SPGD30_LAST_TOUCH_Y As LastUpdated, 
D30.SPGD30_LAST_TOUCH_C As LastUpdatedCDSID 

from 
CSPGD30_TRACKING D30, CSPGD31_TRACKING_RATING_ELEMNT D31, 
CSPGA04_RATING_ELEMENT_MSTR A04 , CSPGJ02_MSG_OBJ J02, CSPGJ03_MSG_TRANSLN J03 

Where D30.SPGD30_SHIP_SITE_C = D31.SPGD30_SHIP_SITE_C -- D30 and D31 
and D30.SPGD30_RATING_MONTH_Y = D31.SPGD30_RATING_MONTH_Y --D30 and D31 
and D31.SPGA04_RATING_ELEMENT_D = A04.SPGA04_RATING_ELEMENT_D --D31 and A04 
and J02.SPGJ02_MSG_K = J03.SPGJ02_MSG_K --J02 and J03 

and A04.SPGJ02_MSG_K = J02.SPGJ02_MSG_K --A04 and Jo2 
and d30.SPGA02_BUSINESS_TYPE_C = 'prod' -- org 
and d30.SPGA03_REGION_C = 'EU' -- region 
and d30.SPGD30_SHIP_SITE_C = 'ms01a' -- shipsite 
and D30.SPGD30_LAST_TOUCH_Y between '2013-01-01 00:00:00.000' --rating month 
and '2013-01-30 23:59:59.000' -- rating month 
and d30.SPGD30_LAST_TOUCH_C = 'sadalara' --CDSID 
+1

可能重复[如何使用GROUP BY来连接字符串中的SQL Server?(http://stackoverflow.com/questions/273238/how-to -use-group-by-to-concatenate-strings-in-sql-server) – Joe 2013-02-22 07:03:51

+0

GROUP BY查询。按照重复线程中的说明进行操作。 – Joe 2013-02-22 07:04:22

+0

@joe我没有在这里使用该组。如果我使用它显示多次的造船厂,但我只想要一次。 – 2013-02-22 07:11:38

回答

2
SELECT shipsite, RatingMonth, Prior, Revised, Comments = STUFF((
    SELECT CHAR(13) + CHAR(10) + comments 
    FROM dbo.YourTable AS x2 
     WHERE x2.shipsite = x.shipsite 
     AND x2.RatingMonth = x.RatingMonth 
     AND x2.Prior = x.Prior 
     AND x2.Revised = x.Revised 
    FOR XML PATH, TYPE).value('.[1]','nvarchar(max)'), 1, 2, '') 
FROM dbo.YourTable AS x 
GROUP BY shipsite, RatingMonth, Prior, Revised; 
+0

等我检查并让你知道。谢谢你的回复 – 2013-02-22 07:12:13

+0

我在这里添加了我的查询,你可以请看看 – 2013-02-22 07:30:43

+0

我添加了我的屏幕截图供您考虑 – 2013-02-22 07:34:39

相关问题