1

我必须使用一个函数创建一个视图,该函数将在成百上千列之间用逗号格式化值。然后我需要在视图上运行一个 select 语句来查找值大于 800 的项目。我遇到的问题是,在定义 WHERE 语句时,我收到以下错误:

消息 245,级别 16,状态 1,第 4
行将 varchar 值“17.50”转换为数据类型 int 时转换失败。

我认为这是因为我在视图中创建的数据类型,但我不确定如何以允许我编写 select 语句以查看值 < 800 的方式编写它,并且将保持具有的格式要求成百列和千列之间的逗号。

这是选择语句:

SELECT VendorName
FROM VendorStatistics
WHERE InvLineItemTotal < 800

这是创建 w 视图的原始代码:

CREATE VIEW VendorStatistics
AS
SELECT VendorName, COUNT(Invoices.InvoiceID) AS CountOfInvoices, CONVERT(varchar, SUM(InvoiceLineItemAmount), 1) AS InvLineItemTotal
FROM Vendors JOIN Invoices
    ON Vendors.VendorID = Invoices.VendorID
    JOIN InvoiceLineItems
    ON Invoices.InvoiceID = InvoiceLineItems.InvoiceID
GROUP BY VendorName
4

3 回答 3

0

SUM(InvoiceLineItemAmount) AS InvLineItemTotalNumeric您的视图应在其输出中包含原始求和的数字字段。使用该字段进行数字比较:

SELECT VendorName
FROM VendorStatistics
WHERE InvLineItemTotalNumeric < 800

仅使用格式化字段InvLineItemTotal进行显示。

于 2013-03-28T03:27:35.060 回答
0

你有没有尝试过?

SELECT VendorName
FROM VendorStatistics
WHERE convert(float, InvLineItemTotal) < 800.0
于 2013-03-28T03:47:22.443 回答
0

出于多种原因,这是一个坏主意,但如果您必须为作业执行此操作,请更改视图以将实数和格式化数字都包含为字符串。

CREATE VIEW VendorStatistics
AS
SELECT VendorName, COUNT(Invoices.InvoiceID) AS CountOfInvoices, CONVERT(varchar, SUM(InvoiceLineItemAmount), 1) AS InvLineItemTotal, SUM(InvoiceLineItemAmount) as InvoiceLineItemSum
FROM Vendors JOIN Invoices
    ON Vendors.VendorID = Invoices.VendorID
    JOIN InvoiceLineItems
    ON Invoices.InvoiceID = InvoiceLineItems.InvoiceID
GROUP BY VendorName

现在可以查询:

SELECT VendorName
FROM VendorStatistics
WHERE InvoiceLineItemSum < 800.0

甚至

SELECT VendorName, InvLineItemTotal
FROM VendorStatistics
WHERE InvoiceLineItemSum < 800.0
于 2013-03-28T21:54:07.513 回答