1

数百と数千の列の間にカンマを使用して値をフォーマットする関数を使用してビューを作成する必要があります。次に、ビューで select ステートメントを実行して、値が 800 を超える項目を検索する必要があります。私が直面している問題は、WHERE ステートメントを定義するときに、次のエラーが発生することです。

メッセージ 245、レベル 16、状態 1、行 4
varchar 値 '17.50' をデータ型 int に変換するときに変換に失敗しました。

ビューで作成したデータ型が原因だと思いますが、selectステートメントを記述して800未満の値を表示し、フォーマット要件を維持する方法でそれを記述する方法がわかりません百と千の列の間のコンマ。

選択ステートメントは次のとおりです。

SELECT VendorName
FROM VendorStatistics
WHERE InvLineItemTotal < 800

ビューを作成するための元のコードは次のとおりです。

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

やってみました?

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 に答える
0

ビューのSUM(InvoiceLineItemAmount) AS InvLineItemTotalNumeric出力には、元の合計数値フィールドが含まれている必要があります。そのフィールドを使用して数値比較を行います。

SELECT VendorName
FROM VendorStatistics
WHERE InvLineItemTotalNumeric < 800

書式設定されたフィールドInvLineItemTotalは表示のみに使用してください。

于 2013-03-28T03:27:35.060 に答える