Me gustaría que la consulta a continuación (segundo cuadro) elimine los caracteres char 10 y char 13. Intenté usar la sintaxis para dos campos con alias que se ven a continuación. Recibo un problema en el que intellisense intenta dividirlo en diferentes consultas. Puedo usar la sintaxis para una columna con alias, pero no dos. ¿Cómo puedo hacer esto mejor?

Comments = REPLACE(REPLACE([Comments], CHAR(13), ''), CHAR(10), '') AS 'SAP REMARKS'

NOTES   = REPLACE(REPLACE([Notes], CHAR(13), ''), CHAR(10), '') AS 'WMS NOTES'

Tengo la siguiente consulta y se ejecuta bien. Cambiaré la fecha de un valor codificado una vez que obtenga los datos para extraer.

SELECT  
    [DocEntry],
    CASE 
       WHEN DOCSTATUS = 'O' THEN 'OPEN'
       WHEN DOCSTATUS = 'C' THEN 'CLOSED/CANCELLED'
      ELSE NULL 
    END AS 'SAP STATUS',
    [STATUS] AS 'WMS STATUS',
    confirmed,
    [CardCode], [CardName],
    Comments AS 'SAP REMARKS',
    NOTES AS 'WMS NOTES',
    [DocDate], [DocDueDate] 
FROM
    [DBASE1].[ENV].[dbo].[ORDR]B
LEFT JOIN 
    [DBASE2].[ENV].[dbo].[OUTBOUNDORHEADER] A ON orderid = DocEntry
WHERE 
    DOCDATE = '2018-09-06'    


SELECT  
    [DocEntry],
    CASE
       WHEN DOCSTATUS = 'O' THEN 'OPEN'
       WHEN DOCSTATUS = 'C' THEN 'CLOSED/CANCELLED'
       ELSE NULL 
    END AS 'SAP STATUS',
    [STATUS] AS 'WMS STATUS',
    confirmed,
    [CardCode], [CardName],
    Comments = REPLACE(REPLACE([Comments], CHAR(13), ''), CHAR(10), '') AS 'SAP REMARKS',
    NOTES = REPLACE(REPLACE([Notes], CHAR(13), ''), CHAR(10), '') AS 'WMS NOTES',
    [DocDate]
FROM 
    [DBASE1].[ENV].[dbo].[ORDR]B
LEFT JOIN 
    [DBASE2].[ENV].[dbo].[OUTBOUNDORHEADER] A ON orderid = DocEntry
WHERE 
    DOCDATE = '2018-09-06'
1
Thomas 7 sep. 2018 a las 20:21

3 respuestas

La mejor respuesta

Gracias por la consulta extra. Justo lo que pensaba. Alias tu columna dos veces, una con xxx = ..., y luego con AS. Aqui tienes:

SELECT
  [DocEntry]
 ,CASE
    WHEN DOCSTATUS = 'O' THEN 'OPEN'
    WHEN DOCSTATUS = 'C' THEN 'CLOSED/CANCELLED'
    ELSE NULL
  END AS [SAP STATUS]
 ,[STATUS] AS [WMS STATUS]
 ,confirmed
 ,[CardCode]
 ,[CardName]
 ,REPLACE(REPLACE([Comments], CHAR(13), ''), CHAR(10), '') AS [SAP REMARKS]
 ,REPLACE(REPLACE(CAST([Notes] AS NVARCHAR(MAX)), CHAR(13), ''), CHAR(10), '') AS [WMS NOTES]
 ,[DocDate]
 ,[DocDueDate]
FROM
  [DBASE1].[ENV].[dbo].[ORDR] AS B
  LEFT JOIN
    [DBASE2].[ENV].[dbo].[OUTBOUNDORHEADER] AS A
      ON
      orderid = DocEntry
WHERE
  DOCDATE = '2018-09-06';

Editar : se agregó el CAST explícito a la columna Notes, por comentarios.

1
Eric Brandt 7 sep. 2018 a las 18:39

Lo siguiente debería funcionar bien:

SELECT  [DocEntry]
,CASE DOCSTATUS WHEN 'O' THEN 'OPEN' WHEN 'C' THEN 'CLOSED/CANCELLED' ELSE NULL END AS 'SAP STATUS'
,[STATUS] AS 'WMS STATUS' 
,confirmed
,[CardCode]
,[CardName]
,replace(replace([Comments],Char(13),''),CHAR(10),'') AS 'SAP REMARKS'
,replace(replace([Notes],Char(13),''),CHAR(10),'') AS 'WMS NOTES'
,[DocDate]
,[DocDueDate] 
FROM [DBASE1].[ENV].[dbo].[ORDR]B
left join [DBASE2].[ENV].[dbo].[OUTBOUNDORHEADER]A
on orderid = DocEntry
where DOCDATE = '2018-09-06'
1
sacse 7 sep. 2018 a las 17:47

Ejecute lo siguiente (sin la parte comments = de su sintaxis original):

SELECT  [DocEntry]
,CASE
WHEN DOCSTATUS = 'O' 
THEN 'OPEN'
WHEN DOCSTATUS = 'C'
THEN 'CLOSED/CANCELLED'
ELSE NULL END AS 'SAP STATUS'
,[STATUS] AS 'WMS STATUS' 
,confirmed
,[CardCode]
,[CardName]
,replace(replace([Comments],Char(13),''),CHAR(10),'') AS 'SAP REMARKS'
,replace(replace([Notes],Char(13),''),CHAR(10),'') AS 'WMS NOTES'
,[DocDate]
 FROM [DBASE1].[ENV].[dbo].[ORDR]B
 left join [DBASE2].[ENV].[dbo].[OUTBOUNDORHEADER]A
on orderid = DocEntry
where DOCDATE = '2018-09-06'

Por lo general, solo necesitaría usar algo como comments = si está tratando de actualizar la tabla de origen, establecer el valor de una variable declarada o similar.

1
APH 7 sep. 2018 a las 17:48