Met*_*sis 0 sql-server sql-server-2008-r2
我正忙于不同数据库之间的 SQL 中的 UNION ALL。
SELECT CostValue AS [COST OF SALES], Customer AS [CUSTOMER CODE], DocumentType AS [DOCUMENT TYPE], Invoice AS [INVOICE NO], InvoiceDate AS [INVOICE DATE],
DATEPART(dd, InvoiceDate) AS [INVOICE DAY], Mass AS MASS, NetSalesValue AS SALES, NetSalesValue - CostValue AS [GROSS PROFIT], OrderType,
QtyInvoiced AS QUANTITY, SalesOrder, StockCode AS [STOCK CODE], TrnMonth AS [FIN MONTH], TrnYear AS [FIN YEAR], TrnYear * 100 + TrnMonth AS YYYYMM,
'SHP' AS COMPANY
FROM SomeCompanyA.dbo.SalesDetail
WHERE (LineType = 1) AND (TrnYear >= 2010)
UNION ALL
SELECT CostValue AS [COST OF SALES], Customer AS [CUSTOMER CODE], DocumentType AS [DOCUMENT TYPE], Invoice AS [INVOICE NO], InvoiceDate AS [INVOICE DATE],
DATEPART(dd, InvoiceDate) AS [INVOICE DAY], Mass AS MASS, NetSalesValue AS SALES, NetSalesValue - CostValue AS [GROSS PROFIT], OrderType,
QtyInvoiced AS QUANTITY, SalesOrder, StockCode AS [STOCK CODE], TrnMonth AS [FIN MONTH], TrnYear COLLATE DATABASE_DEFAULT AS [FIN YEAR], (TrnYear * 100) COLLATE database_default + TrnMonth AS YYYYMM,
'SGF' AS COMPANY
FROM SQLXXXXXX.SomeCompanyB.dbo.SalesDetail AS SalesDetail_1
WHERE (LineType = 1) AND (TrnYear >= 2010)
Run Code Online (Sandbox Code Playgroud)
我在执行“表达式类型数字对于 COLLATE 子句无效”时收到以下错误,我认为这是来自 (TrnYear * 100) COLLATE database_default + TrnMonth AS YYYYMM
我不知道如何整理它,因为我将其理解为串联而不是隐式转换。
请有人提供一些关于如何正确投射的建议。
我也看过这里在 CONCAT 中使用整理,但我看不出这将如何工作,因为我在这一年使用了一个运算符。
也许我错过了一些东西。任何意见,将不胜感激。
谢谢
COLLATE 用于文本类型,并且 (TrnYear * 100) 计算结果为数字。在使用 COLLATE 之前,尝试使用 CAST((TrnYear * 100) AS VARCHAR) 转换为 varchar。