Sql 案例翻译
好的,所以我需要将最初在access数据库上使用的查询转换为将在SQL Compact Edition数据库上运行的查询 在这个查询中,我有一个IIF语句(在sql中不起作用) 我查到的所有信息都表明,我应该在需要时用Case替换它 这是我的原始代码:Sql 案例翻译,sql,ms-access,Sql,Ms Access,好的,所以我需要将最初在access数据库上使用的查询转换为将在SQL Compact Edition数据库上运行的查询 在这个查询中,我有一个IIF语句(在sql中不起作用) 我查到的所有信息都表明,我应该在需要时用Case替换它 这是我的原始代码: Select [OrderNumber], [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber], [OrderBuildTime], [RequiredDateTime], [La
Select [OrderNumber], [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported], Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee from
SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
这是IIF的声明:
Select [OrderNumber], [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported], Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee from
SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
这是我将IIF语句替换为:
Select [OrderNumber], [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported], Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee from
SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
这就是整个代码体的后记:
Select [OrderNumber], [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported], Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee from
SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
Sum(IIF([Status] = 'Printed', PanelBuildTime, 0)) AS OrderBuildTimee
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
这是我的新错误消息:
Major Error 0x80040E14, Minor Error 25501
> Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
ON
SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
There was an error parsing the query. [ Token line number = 12,Token line offset = 58,Token in
error = ) ]
案例的正确语法是:
Simple CASE expression:
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Searched CASE expression:
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
在查询中,您缺少案例的结尾
:
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0 END) AS OrderBuildTimee
因此,完整的代码是:
Select [OrderNumber],
[CustomerName],
[PO_TAG],
[Shape],
[Size],
[DrawingNumber],
[OrderBuildTime],
[RequiredDateTime],
[LatestStatusTime],
[ExpectedCompletionDateTime],
[DateImported],
Sum(CASE Status WHEN 'Printed' THEN PanelBuildTime ELSE 0 END) AS OrderBuildTimee
From SteelOrders
INNER JOIN FinalizedPrintedStickers
-- left not supported by sql server ce use substring
-- ON SteelOrders.OrderNumber = LEFT(FinalizedPrintedStickers.SN,10)
ON SteelOrders.OrderNumber = substring(FinalizedPrintedStickers.SN, 1, 10)
GROUP BY SteelOrders.OrderNumber, [CustomerName], [PO_TAG], [Shape], [Size], [DrawingNumber],
[OrderBuildTime], [RequiredDateTime], [LatestStatusTime], [ExpectedCompletionDateTime],
[DateImported]
是的,但我收到了一条新的错误消息,因为sqlcompact-\ux-中不支持LEFT。哦,好吧,我将用子字符串替换它