如何在 SQL 服务器中将两 table 列合并为一列
How to CONCAT two table columns into one column in SQL Server
我是 SQL 服务器的新手。我有一个脚本。请先检查脚本
SELECT
WOtask.PK,
WOPK,
TaskNo,
TaskAction = CASE
WHEN WOTask.AssetPK IS NOT NULL
THEN '<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' +
CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> ''''
THEN RTRIM(Asset.Vicinity) + ': '
ELSE ''''
END + WOtask.TaskAction + CASE
WHEN CONVERT(varchar, ValueLow) IS NOT NULL AND
CONVERT(varchar, ValueHi) IS NOT NULL AND
Spec = 1 THEN ' ('+ 'Range:'+ '' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueLow,0))) + ' - ' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueHi,0))) + ')'
ELSE ''
END
ELSE WOtask.TaskAction + CASE
WHEN CONVERT(varchar, ValueLow) IS NOT NULL AND
CONVERT(varchar, ValueHi) IS NOT NULL AND
Spec = 1 THEN ' ('+ 'Range:'+ '' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueLow,0))) + ' - ' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueHi,0))) + ')'
ELSE ''
END
END ,
Rate,
Measurement,
Initials,
Fail,
Complete,
Header,
LineStyle,
WOtask.Comments,
WOtask.NotApplicable,
WOTask.Photo1,
WOTask.Photo2
FROM
WOtask WITH (NOLOCK)
LEFT OUTER JOIN
Asset WITH (NOLOCK) ON Asset.AssetPK = WOTask.AssetPK
LEFT OUTER JOIN
AssetSpecification ON AssetSpecification.PK = WOTask.AssetSpecificationPK
WHERE
(WOPK IN (SELECT WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK) ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10939)
)
ORDER BY
WOPK, TaskNo
这是输出:
现在我的要求是将 TaskAction 和 Comment 列连接成单个列。我想举一个我的要求的例子:该列必须显示 TaskAction 值加上 Comment: hi(comment column value) 。我一直在尝试将 CONVERT 函数用于连接两列,但我无法得到结果,因为我一直将转换函数应用到错误的位置。
请帮我解决一下。提前致谢
这是您应该使用的SQL:
SELECT WOtask.PK
, WOPK
, TaskNo
, TaskAction = CASE
WHEN WOtask.AssetPK IS NOT NULL THEN
'<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' + CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> '''' THEN
RTRIM(Asset.Vicinity) + ': '
ELSE
''''
END + WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - '
+ CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0))) + ')'
ELSE
''
END
ELSE
WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - '
+ CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0))) + ')'
ELSE
''
END
END
, Rate
, Measurement
, Initials
, Fail
, Complete
, Header
, LineStyle
, WOtask.Comments
, WOtask.NotApplicable
, WOtask.Photo1
, WOtask.Photo2
, ISNULL(
CASE
WHEN WOtask.AssetPK IS NOT NULL THEN
'<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' + CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> '''' THEN
RTRIM(Asset.Vicinity) + ': '
ELSE
''''
END + WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - ' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0)))
+ ')'
ELSE
''
END
ELSE
WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - ' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0)))
+ ')'
ELSE
''
END
END
, ''
) + ISNULL(WOtask.Comments, '') AS [Single Column]
FROM WOtask WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WOtask.AssetPK
LEFT OUTER JOIN AssetSpecification ON AssetSpecification.PK = WOtask.AssetSpecificationPK
WHERE (WOPK IN
(
SELECT WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK) ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10939
)
)
ORDER BY WOPK
, TaskNo;
我是 SQL 服务器的新手。我有一个脚本。请先检查脚本
SELECT
WOtask.PK,
WOPK,
TaskNo,
TaskAction = CASE
WHEN WOTask.AssetPK IS NOT NULL
THEN '<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' +
CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> ''''
THEN RTRIM(Asset.Vicinity) + ': '
ELSE ''''
END + WOtask.TaskAction + CASE
WHEN CONVERT(varchar, ValueLow) IS NOT NULL AND
CONVERT(varchar, ValueHi) IS NOT NULL AND
Spec = 1 THEN ' ('+ 'Range:'+ '' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueLow,0))) + ' - ' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueHi,0))) + ')'
ELSE ''
END
ELSE WOtask.TaskAction + CASE
WHEN CONVERT(varchar, ValueLow) IS NOT NULL AND
CONVERT(varchar, ValueHi) IS NOT NULL AND
Spec = 1 THEN ' ('+ 'Range:'+ '' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueLow,0))) + ' - ' + CONVERT(VARCHAR,CONVERT(FLOAT,ISNULL(ValueHi,0))) + ')'
ELSE ''
END
END ,
Rate,
Measurement,
Initials,
Fail,
Complete,
Header,
LineStyle,
WOtask.Comments,
WOtask.NotApplicable,
WOTask.Photo1,
WOTask.Photo2
FROM
WOtask WITH (NOLOCK)
LEFT OUTER JOIN
Asset WITH (NOLOCK) ON Asset.AssetPK = WOTask.AssetPK
LEFT OUTER JOIN
AssetSpecification ON AssetSpecification.PK = WOTask.AssetSpecificationPK
WHERE
(WOPK IN (SELECT WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK) ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10939)
)
ORDER BY
WOPK, TaskNo
这是输出:
现在我的要求是将 TaskAction 和 Comment 列连接成单个列。我想举一个我的要求的例子:该列必须显示 TaskAction 值加上 Comment: hi(comment column value) 。我一直在尝试将 CONVERT 函数用于连接两列,但我无法得到结果,因为我一直将转换函数应用到错误的位置。
请帮我解决一下。提前致谢
这是您应该使用的SQL:
SELECT WOtask.PK
, WOPK
, TaskNo
, TaskAction = CASE
WHEN WOtask.AssetPK IS NOT NULL THEN
'<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' + CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> '''' THEN
RTRIM(Asset.Vicinity) + ': '
ELSE
''''
END + WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - '
+ CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0))) + ')'
ELSE
''
END
ELSE
WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - '
+ CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0))) + ')'
ELSE
''
END
END
, Rate
, Measurement
, Initials
, Fail
, Complete
, Header
, LineStyle
, WOtask.Comments
, WOtask.NotApplicable
, WOtask.Photo1
, WOtask.Photo2
, ISNULL(
CASE
WHEN WOtask.AssetPK IS NOT NULL THEN
'<b>' + Asset.AssetName + ' [' + Asset.AssetID + ']</b> ' + CASE
WHEN Asset.Vicinity IS NOT NULL
AND Asset.Vicinity <> '''' THEN
RTRIM(Asset.Vicinity) + ': '
ELSE
''''
END + WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - ' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0)))
+ ')'
ELSE
''
END
ELSE
WOtask.TaskAction
+ CASE
WHEN CONVERT(VARCHAR, ValueLow) IS NOT NULL
AND CONVERT(VARCHAR, ValueHi) IS NOT NULL
AND Spec = 1 THEN
' (' + 'Range:' + '' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueLow, 0))) + ' - ' + CONVERT(VARCHAR, CONVERT(FLOAT, ISNULL(ValueHi, 0)))
+ ')'
ELSE
''
END
END
, ''
) + ISNULL(WOtask.Comments, '') AS [Single Column]
FROM WOtask WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WOtask.AssetPK
LEFT OUTER JOIN AssetSpecification ON AssetSpecification.PK = WOtask.AssetSpecificationPK
WHERE (WOPK IN
(
SELECT WOPK
FROM WO WITH (NOLOCK)
LEFT OUTER JOIN Asset WITH (NOLOCK) ON Asset.AssetPK = WO.AssetPK
LEFT OUTER JOIN AssetHierarchy WITH (NOLOCK) ON AssetHierarchy.AssetPK = WO.AssetPK
WHERE WO.WOPK = 10939
)
)
ORDER BY WOPK
, TaskNo;