私はこの問題に数日間苦労しており、どうすれば修正できるかわかりません。
私はgroup by
値のテーブル1
、2
、3
、4
、5
を作成したいと思います一時テーブルこの値で。
次に、このテーブルをINNER JOIN
の他のテーブルと一緒にa.value = #myTempTable.num
する必要があります。
しかしa.value
はntext
であるため、実際に行ったことをCONVERT
する必要がありますが、エラーが発生します。
Varchar値 'simple、'をデータ型intに変換するときに変換が失敗しました。 (7行目)
Create table #myTempTable
(
num int
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)
SELECT a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) AS value, COUNT(*) AS pocet
FROM
(SELECT item.name, value.value
FROM mdl_feedback AS feedback
INNER JOIN mdl_feedback_item AS item
ON feedback.id = item.feedback
INNER JOIN mdl_feedback_value AS value
ON item.id = value.item
WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
) AS a
INNER JOIN #myTempTable
on CONVERT(INT, CONVERT(VARCHAR(12), a.value)) = #myTempTable.num
GROUP BY a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) ORDER BY a.name
drop table #myTempTable
最後のINNER JOIN
なしではこのエラーは発生しません
INNER JOIN #myTempTable on CONVERT(INT, CONVERT(VARCHAR(12), a.value))
= #myTempTable.num
私を手伝ってくれますか?私は必死です。
ありがとう。
このようなエラーを回避するには、CASE
+ ISNUMERIC
を使用して、intに変換できないシナリオを処理できます。
変化する
CONVERT(INT, CONVERT(VARCHAR(12), a.value))
に
CONVERT(INT,
CASE
WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
ELSE 0 END)
基本的に、これはあなたが私をintに割り当てることができない場合に0の値を割り当てることを言っています(私の例では)
または、a.value
が数値であるかどうかを確認するカスタム関数の作成に関するこの記事をご覧ください。 http://www.tek-tips.com/faqs.cfm?fid=642
比較を実行するためにint
sに変換するだけの場合、テーブル定義をvarchar
の使用に切り替えるだけです。
Create table #myTempTable
(
num varchar(12)
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)
残りのクエリから試行されたCONVERT
sをすべて削除します。
SELECT a.name, a.value AS value, COUNT(*) AS pocet
FROM
(SELECT item.name, value.value
FROM mdl_feedback AS feedback
INNER JOIN mdl_feedback_item AS item
ON feedback.id = item.feedback
INNER JOIN mdl_feedback_value AS value
ON item.id = value.item
WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
) AS a
INNER JOIN #myTempTable
on a.value = #myTempTable.num
GROUP BY a.name, a.value ORDER BY a.name
Varcharをintに変換する場合、小数点以下の桁数がないことを確認してください。
たとえば、値(12345.0)のvarcharフィールドを整数に変換している場合、この変換エラーが発生します。私の場合、すべてのフィールドの末尾が.0であるため、次のステートメントを使用して問題をグローバルに修正しました。
CONVERT(int, replace(FIELD_NAME,'.0',''))