Mar*_*ark 2 sql-server group-by
我有一个零件表:
ID, Description
ABC-123 ABC
DEF-456 DEF
Run Code Online (Sandbox Code Playgroud)
我有一个用户定义的字段表,将信息存储在一行中。
ID, DOCUMENTID, STRING_VAL, DATE_VAL
UDF-000021, ABC-123, TEXT123, NULL
UDF-000022, ABC-123, NULL, 6/10/2016
UDF-000023, ABC-123, JOHN WORKING ON IT, NULL
UDF-000024, ABC-123, NULL, 7/1/2016
UDF-000025, ABC-123, YES, NULL
UDF-000021, DEF-456, TEXT123, NULL
UDF-000022, DEF-456, NULL, 6/10/2016
Run Code Online (Sandbox Code Playgroud)
我需要信息看起来像这样:
PART ID DESCRIPTION REVISION REVISION DATE NOTES MARKUP DATE IM
-------------------------------------------------------------------------------
ABC-123 ABC TEXT123 6/10/2016 JOHN 7/1/2016 YES
DEF0456 DEF TEXT123 6/10/2016
Run Code Online (Sandbox Code Playgroud)
我看过连接、枢轴等,我想我似乎无法理解它。任何帮助是极大的赞赏。
您可以使用老式PIVOT
方法,因为您需要聚合两个不同的列。
WITH Pivoted AS
(
SELECT DOCUMENTID,
REVISION = MAX(CASE WHEN ID = 'UDF-000021' THEN STRING_VAL END),
[REVISION DATE] = MAX(CASE WHEN ID = 'UDF-000022' THEN DATE_VAL END),
NOTES = MAX(CASE WHEN ID = 'UDF-000023' THEN STRING_VAL END),
[MARKUP DATE] = MAX(CASE WHEN ID = 'UDF-000024' THEN DATE_VAL END),
IM = MAX(CASE WHEN ID = 'UDF-000025' THEN STRING_VAL END)
FROM UserDefinedFields
GROUP BY DOCUMENTID
)
SELECT p.ID,
p.Description,
pv.REVISION,
pv.[REVISION DATE],
pv.NOTES,
pv.[MARKUP DATE],
pv.IM
FROM Part p
LEFT JOIN Pivoted pv
ON p.ID = pv.DOCUMENTID
Run Code Online (Sandbox Code Playgroud)