【发布时间】:2013-02-22 06:58:26
【问题描述】:
我想连接两个或多个字符串,并在 SQL Server 2008 R2 中逐行显示在一条记录中。
我所拥有的是,
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
【问题讨论】:
-
GROUP BY 查询。按照重复线程中的说明进行操作。
-
@joe 我没有在这里使用该组。如果我使用它会多次显示船址,但我只想要一次。
-
我认为您不了解 GROUP BY,那么这就是 GROUP BY 的意义所在。
-
@joe 我知道分组依据,但我需要的是在分组之后我想为同一记录一一显示 cmets。你能帮帮我吗?
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2