SQL将字符串中的int替换为文本
我正在尝试进行查询,但在结果中有一列的数字为“2”,我想用“factura”替换 我该怎么做??我要替换Cust。[文档类型]列SQL将字符串中的int替换为文本,sql,Sql,我正在尝试进行查询,但在结果中有一列的数字为“2”,我想用“factura”替换 我该怎么做??我要替换Cust。[文档类型]列 SELECT Detail.[Entry No_], 'Cliente' AS Tipo, Cust.[Customer No_] AS Cliente, Detail.[Posting Date] AS DATA, Detail.[Document No_] AS Docu
SELECT Detail.[Entry No_],
'Cliente' AS Tipo,
Cust.[Customer No_] AS Cliente,
Detail.[Posting Date] AS DATA,
Detail.[Document No_] AS Documento,
Detail.[Amount (LCY)] AS Valor,
Cust.[Document Type] AS LiqPorTipo,
Cust.[Document No_] AS LiqPorNDocumento,
'97' AS Conta,
'MR' AS Loja,
'SUPER' AS Utilizador,
'MR01' AS POS
FROM dbo.MBS_tabela_21Detailed_NAV16 AS Detail
INNER JOIN dbo.MBS_tabela_21_NAV16 AS Cust ON Detail.[Cust_ Ledger Entry No_] = Cust.[Entry No_]
INNER JOIN dbo.Integracao_Periodo_NAV16 AS Integr ON YEAR(Detail.[Posting Date]) = Integr.Ano
AND MONTH(Detail.[Posting Date]) = Integr.Mes
WHERE (Detail.[Document No_] LIKE '%REC%'
OR Detail.[Document No_] LIKE '%L%')
AND (Detail.[Entry Type] = 2)
AND (Cust.[Global Dimension 1 Code] = 'LMR')
这导致
359229 Cliente 503392154 2018-03-23 00:00:00.000 1803PAGLEITE37 -2064,62000000000000000000 2 MRVFFT1800012 97 MR SUPER MR01
我想要一个
359229 Cliente 503392154 2018-03-23 00:00:00.000 1803PAGLEITE37 -2064,62000000000000000000 fatura MRVFFT1800012 97 MR SUPER MR01
您的查询缺少“详细信息。[条目类型]列”。比较预期的查询结果和您的查询结果,我假设您希望使用case或创建dictionary表来联接它
最好的选择是创建额外的表并将所有键值转换存储在那个里
所以你本来可以
2-事实
并将其加入到您的查询中
如果不是,您应该这样做:
SELECT Detail.[Entry No_],
'Cliente' AS Tipo,
Cust.[Customer No_] AS Cliente,
Detail.[Posting Date] AS DATA,
Detail.[Document No_] AS Documento,
Detail.[Amount (LCY)] AS Valor,
case when Cust.[Document Type] = 2 then 'factura' else '' end AS LiqPorTipo,
Cust.[Document No_] AS LiqPorNDocumento,
'97' AS Conta,
'MR' AS Loja,
'SUPER' AS Utilizador,
'MR01' AS POS
FROM dbo.MBS_tabela_21Detailed_NAV16 AS Detail
INNER JOIN dbo.MBS_tabela_21_NAV16 AS Cust ON Detail.[Cust_ Ledger Entry No_] = Cust.[Entry No_]
INNER JOIN dbo.Integracao_Periodo_NAV16 AS Integr ON YEAR(Detail.[Posting Date]) = Integr.Ano
AND MONTH(Detail.[Posting Date]) = Integr.Mes
WHERE (Detail.[Document No_] LIKE '%REC%'
OR Detail.[Document No_] LIKE '%L%')
AND (Detail.[Entry Type] = 2)
AND (Cust.[Global Dimension 1 Code] = 'LMR')
因为您要根据联接结果替换一个柱基。贝娄可能会帮助你
UPDATE
Table_A
SET
Table_A.col1 = Table_B.col1,
Table_A.col2 = Table_B.col2
FROM
Some_Table AS Table_A
INNER JOIN Other_Table AS Table_B
ON Table_A.id = Table_B.id
WHERE
Table_A.col3 = 'cool'
基于上述结构,您的sql scritp如下所示
UPDATE Detail
SET Detail.[Entry Type] = REPLACE(Detail.[Entry Type], '2', 'factura')
FROM dbo.MBS_tabela_21Detailed_NAV16 AS Detail
INNER JOIN dbo.MBS_tabela_21_NAV16 AS Cust
ON Detail.[Cust_ Ledger Entry No_] = Cust.[Entry No_]
INNER JOIN dbo.Integracao_Periodo_NAV16 AS Integr
ON YEAR(Detail.[Posting Date]) = Integr.Ano
AND MONTH(Detail.[Posting Date]) = Integr.Mes
WHERE (Detail.[Document No_] LIKE '%REC%'
OR Detail.[Document No_] LIKE '%L%')
AND (Detail.[Entry Type] = 2)
AND (Cust.[Global Dimension 1 Code] = 'LMR')
这是无效的标准SQL。您使用的是哪种DBMS产品?您使用的是哪种sql平台?返回的错误消息(如果有)是什么?FROM子句中的错误:“SELECT”附近。无法分析查询文本。您使用哪台SQL server?SQL server 2016假定数据类型不是
INT
。加入后,您具有值并且知道目标列类型,因此可以强制转换它。这不起作用。。。无法更新列或表达式“文档类型”。此SQL语句类型不能在视图或函数中使用。只能使用SELECT语句。我将Cust的更新表和Set字段更改为Cust。[文档类型]您的文档类型是什么?要在此列中存储的数据类型。请检查希望类型是否不匹配