【发布时间】:2013-02-18 09:38:13
【问题描述】:
我正在使用 SQL SERVER 2008 R2。我想获取多个值并同时逐行显示在单列中,如果存在值,否则它会显示一些值,并且可能在单列上显示“12 个值”。
例如,下面的屏幕截图,它显示了除了 cmets 之外的相同数据的记录。我想显示为 单个记录,,但 cmets 应显示 ASN 及时性、ASN 准确性、问题报告 这两个值。这三个值使用相同的shipsite “0096a”逐行显示。
我的示例查询,
SELECT
D30.SPGD30_SHIP_SITE_C AS SHIPSITE,
D30.SPGD30_RATING_MONTH_Y AS RATINGMONTH,
D30.SPGD30_PRIOR_SCORE_R AS PRIOR,
D30.SPGD30_REVISED_SCORE_R AS REVISED,
CASE WHEN (CHARINDEX('-',D30.SPGD30_TRACKED_ADJUSTMENT_X) > 0 ) THEN CONVERT( VARCHAR(8), CAST(D30.SPGD30_TRACKED_ADJUSTMENT_X AS DATETIME) , 1) ELSE D30.SPGD30_TRACKED_ADJUSTMENT_X END ADJUSTMENTS,
J02.SPGJ02_MSG_CODE_X 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
WHERE
D30.SPGA02_BUSINESS_TYPE_C = D31.SPGA02_BUSINESS_TYPE_C
AND
D30.SPGA03_REGION_C = D31.SPGA03_REGION_C
AND
D30.SPGD30_SHIP_SITE_C = D31.SPGD30_SHIP_SITE_C
AND
D30.SPGD30_RATING_MONTH_Y = D31.SPGD30_RATING_MONTH_Y
AND
D30.SPGD30_TRACKED_ADJUSTMENT_X = D31.SPGD30_TRACKED_ADJUSTMENT_X
AND
D30.SPGD30_LAST_TOUCH_Y = D31.SPGD30_LAST_TOUCH_Y
AND
D31.SPGA04_RATING_ELEMENT_D = A04.SPGA04_RATING_ELEMENT_D
AND
A04.SPGJ02_MSG_K = J02.SPGJ02_MSG_K
AND
D30.SPGA02_BUSINESS_TYPE_C = 'serv'
AND
D30.SPGA03_REGION_C = 'ap'
AND
D30.SPGD30_SHIP_SITE_C = '0134a'
ORDER BY
D30.SPGD30_SHIP_SITE_C ASC ,
D30.SPGD30_RATING_MONTH_Y DESC ,
D30.SPGD30_LAST_TOUCH_Y DESC
【问题讨论】:
-
你想要的结果是什么?栏目很多,你要显示哪些栏目?
-
我想在单个列中显示多个值(12 级元素)。例如,如果存在 8 个评级元素,我们将在单个列中仅显示 8 个评级元素。
-
@Adalarasan_Serangulam 您能否发布一些示例数据和所需的结果而不是图像?更好的是使用您的表结构、示例数据创建 SQL Fiddle。
-
您真的需要这个作为 SQL 查询还是为了在 SSRS 报告上显示?
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2