如何更改使用SQL查询显示的数据
我每天运行一个SQL查询来生成一个报告,该报告将以批处理文件的形式发送出去。当我运行查询时,ActionID列下有两个可能的值:21和33。由于这些值对用户没有任何意义,我想将所有21的条目转换为一个字符串,该字符串表示:Moved successfully to:。对于所有33的条目,我想将它们转换为表示移动失败的字符串。对于这两个字符串,我希望它位于名为Comments而不是ActionID的新列下。我有以下代码,但它给了我一些错误。是否有人可以对我的代码进行任何修改以使其成功运行?我们将不胜感激如何更改使用SQL查询显示的数据,sql,sql-server,Sql,Sql Server,我每天运行一个SQL查询来生成一个报告,该报告将以批处理文件的形式发送出去。当我运行查询时,ActionID列下有两个可能的值:21和33。由于这些值对用户没有任何意义,我想将所有21的条目转换为一个字符串,该字符串表示:Moved successfully to:。对于所有33的条目,我想将它们转换为表示移动失败的字符串。对于这两个字符串,我希望它位于名为Comments而不是ActionID的新列下。我有以下代码,但它给了我一些错误。是否有人可以对我的代码进行任何修改以使其成功运行?我们将不
SELECT ItemId AS [Item ID],
CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS DATE) 'Date',
LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
[Object] AS [Media],
SourceSite AS [Source Site], where ActionID = '21' to
'Was successfully moved to' AS [Comments] AND where ActionID ='33' 'Was unsuccessful' AS [Comments],
DestSite AS [Destination Site]
FROM ( SELECT ItemId,
CONVERT(VARCHAR(18),[Date]) [Date],
[Object],
SourceSite,
DestSite,
UserCode
FROM JnlMediumMove
WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
substring(convert(varchar(50), [Date]), 5, 2) + '-' +
substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to remove the time part
WHERE UserCode = 'Automation'
ORDER BY [Date] DESC;
您要使用CASE语句,基本格式:
CASE WHEN criteria1 THEN result1
WHEN criteria2 THEN result2
ELSE default result
END
在您的查询中:
SELECT ItemId AS [Item ID],
CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS DATE) 'Date',
LEFT(CAST(DATEADD(HOUR,-4,CONVERT(DATETIME,LEFT([Date],8)+' '+
SUBSTRING([Date],10,2)+':'+
SUBSTRING([Date],12,2)+':'+
SUBSTRING([Date],14,2)+'.'+
SUBSTRING([Date],15,3))) AS TIME),8) 'Time',
[Object] AS [Media],
SourceSite AS [Source Site],
CASE WHEN ActionID = '21' THEN 'Was successfully moved to'
WHEN ActionID ='33' THEN 'Was unsuccessful'
ELSE '' --Optional ELSE
END AS [Comments],
DestSite AS [Destination Site]
FROM ( SELECT ItemId,
CONVERT(VARCHAR(18),[Date]) [Date],
[Object],
SourceSite,
DestSite,
ActionID,
UserCode
FROM JnlMediumMove
WHERE CAST(substring(convert(varchar(50), [Date]), 0, 5) + '-' +
substring(convert(varchar(50), [Date]), 5, 2) + '-' +
substring(convert(varchar(50), [Date]), 7, 2) AS DATETIME) =
CONVERT(date, DATEADD(day, -1, getdate()))) A --Converting to date again to remove the time part
WHERE UserCode = 'Automation'
ORDER BY [Date] DESC;
编辑:假设您忘记将ActionID添加到子查询中。为什么不添加一个表,将
ActionID | Description
,连接到它,并选择它的Description
而不是ActionID
它说:Msg 207,级别16,状态1,第14行无效列名“ActionID”。Msg 207,级别16,状态1,第15行无效列名“ActionId”。哦,您的选择列表中没有ActionId。它来自哪里?你的问题听起来好像你已经有了一个选择ActionID的查询。它在表中,我只是不希望该列出现在显示中。如果我将其添加到选择列表中,它会起作用吗?或者我希望Comments列替换Action ID列也可以。是的,我将其添加到子查询选择列表中,它需要通过在子查询中被选中而对CASE语句可用,但您不必返回它,请参阅更新的答案。