1

バッチ ファイルで送信されるレポートを生成するために、SQL クエリを毎日実行しています。クエリを実行すると、ActionID 列の下に 21 と 33 の 2 つの値が考えられます。これらの値はユーザーにとって何の意味もないため、21 であるすべてのエントリを次のような文字列に変換したいと思います。33 のすべてのエントリについて、Moving failed という文字列に変換したいと思います。これらの文字列は両方とも、ActionID ではなく、Comments という名前の新しい列の下に配置したいと考えています。次のコードがありますが、いくつかのエラーが発生しています。これを正常に実行するために、誰かが私のコードを変更できますか? それは大歓迎です。

   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;
4

1 に答える 1

0

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 を追加するのを忘れたと仮定します。

于 2013-06-26T14:14:36.220 に答える