【发布时间】:2018-04-06 02:28:36
【问题描述】:
我需要帮助解决将 Excel 公式转换为 SQL 的问题。
这是公式:
=IF(
([@[Net Available Stock Quantity]]+[@Subcon]+[@[In Progress WIP]]+
IFERROR([@[Raw Material In Store]]/[@[Demand Material]],0)+
IFERROR([@[Outstanding Raw Material]]/[@[Demand Material]],0)+
[@[Outstanding WIP]])>[@[Maximun Stock]],
([@[Net Available Stock Quantity]]+[@Subcon]+[@[In Progress WIP]]+
IFERROR([@[Raw Material In Store]]/[@[Demand Material]],0)+
IFERROR([@[Outstanding Raw Material]]/[@[Demand Material]],0)+
[@[Outstanding WIP]]-[@[Maximun Stock]]),
IF(([@[Net Available Stock Quantity]]+[@Subcon]+[@[In Progress WIP]]+
IFERROR([@[Raw Material In Store]]/[@[Demand Material]],0)+
IFERROR([@[Outstanding Raw Material]]/[@[Demand Material]],0)+[@[Outstanding WIP]])<[@[Minimum Stock]],
-[@[Minimum Stock]]+([@[Net Available Stock Quantity]]+[@Subcon]+[@[In Progress WIP]]+
IFERROR([@[Raw Material In Store]]/[@[Demand Material]],0)+
IFERROR([@[Outstanding Raw Material]]/[@[Demand Material]],0)+[@[Outstanding WIP]]),0)
)
这就是我所做的:
USE myDB
SELECT [Item No],
CASE
WHEN ([Net Available Stock Quantity]+Subcon+[In Progress WIP]+CASE (
WHEN ([Raw Material In Store] AND [Demand Material] != 0 THEN [Raw Material In Store]/[Demand Material] ELSE 0) +
WHEN ([Outstanding Raw Material] AND [Demand Material] != 0 THEN [Outstanding Raw Material]/[Demand Material] ELSE 0) +
[Outstanding WIP]) > [Maximum Stock])
THEN ([Net Available Stock]+Subcon+[Outstanding WIP]+CASE (
WHEN ([Raw Material] AND [Demand Material] != 0 THEN [Raw Material]/[Demand Material] ELSE 0) +
WHEN ([Outstanding Raw Material] AND [Demand Material] != 0 THEN [Outstanding Raw Material]/[Demand Material] ELSE 0) +
[Outstanding WIP) - [Maximum Stock])
ELSE (
CASE
WHEN([Net Available Stock Quantity]+Subcon+[Outstanding WIP]+CASE (
WHEN ([Raw Material In Store AND [Demand Material] != 0 THEN [Raw Material In Store]/[Demand Material] ELSE 0) +
WHEN ([Outstanding Raw Material] AND [Demand Material] != 0 THEN [Outstanding Raw Material]/[Demand Material] ELSE 0) +
[Outstanding WIP] < [Minimum Stock])
THEN ([Minimum Stock]+[Net Available Stock Quantity]+Subcon+[Outstanding WIP]+CASE (
WHEN ([Raw Material In Store] AND [Demand Material] != 0 THEN [Raw Material In Store]/[Demand Material] ELSE 0) +
WHEN ([Outstanding Raw Material] AND [Demand Material] != 0 THEN [Outstanding Raw material]/[Demand Material] ELSE 0) +
[Outstanding WIP])
END AS [Final Stock Over Max],
FROM myTable
所以,当我粘贴到 SQL Server 查询时出现的问题,
- 在 [项目编号] 列名无效。 (在某些名称上有很多这样的错误)
- 第二个 WHEN 语法无效。
- 在 ELSE 中的 CASE 无效语法。
- 关于 AS 无效语法。
我使用THIS LINK作为转换excel公式的指南。
你们认为我做错了什么?我尝试转换已经 2 天了,我尝试了很多示例,但仍然出现错误。
更新:
myTable 结构:
[Item No] nchar(24)
Description nchar(60)
UOM nchar(10)
Stock int
Sales int
[Minimum Stock] int
[Maximum Stock] int
[Subcon Code] char(24)
[Raw Material] char(24)
[Description Material] nchar(60)
[Demand Material] char(10)
[In Progress WIP] char(10)
Subcon int
[Net Available Stock Quantity] int
[Stock Over Maximum] int
[Raw Material Outstanding] int
[Raw Material In Store] int
[Outstanding WIP] int
【问题讨论】:
-
我现在无法调试它,因为我不在 SSMS 前面,但我建议让 API 的较小部分工作,然后构建表达式。跨度>
-
您正尝试在 SQL Server 中使用 Excel 语法。 Excel(和 Access)不是 SQL Server。他们使用完全不同的语法。您将需要先学习 TSQL,然后将事情分成小部分来弄清楚,而不是试图一次性完成所有事情。
-
请显示
myTable的定义——所有字段和数据类型。谢谢。 -
@KenWhite 我在较小的计算中完成了 2 列。一切顺利,完全没有问题。这个公式是我表的最后一块
-
这是一个非常大的最后一块,你开始的问题(你的观点#1)应该是你很久以前遇到的问题。而当它到达 SQL Server 时,它就不再是一个公式了。这是一条 SQL SELECT 语句。区别很重要。
标签: sql sql-server excel