2011-01-03 17 views
0

erhalten Ich erhalte einen Fehler beim Eliminieren der hart codierten Werte.Fehler beim Ausführen

Statt diesem Fall Aussage muss ich einfach select-Anweisung schreiben ... Temptabellen mit ...

select case [BVG] 
    when 1 then 1 
    when 2 then 2 
    when 3 then 3 
end as Q0, 

SELECT CASE [AVG] 
    when 1 then 1 
    when 1.33 then 2 
    when 1.5 then 2 
    when 1.67 then 3 
    when 2 then 3 
    when 2.33 then 4 
End as Q 

FROM [MS].[BE].[Survey] 

So habe ich einen Code temporäre Tabelle geschrieben .....

SELECT [Source], [Score] 

INTO #Temp_Table 

FROM [MS].[dbo].[S_Survey] 

WHERE [data_Source] = 'USA' 

Statt diesem Fall Aussage ich diese select-Anweisung bin ersetzt ....

SELECT q.[Score] as Q --- Getting error in this place.Data Type is varchar (100). 

FROM [MS].[BE].[Survey] s 

LEFT OUTER JOIN #Temp_Table q on 

s.[AVG] = q.[Source] 

Aber ich bin bekommen ein Fehler ting während der Ausführung .... Und der Fehler

Msg 8114, Ebene 16, Status 5, Zeile 1 Fehler beim Konvertieren Datentyp varchar zu schweben.

Statt diesem Ort in der Nähe von q.[score] as Q was kann ich schreiben .... und wie kann ich schreiben die Syntax ...

Danke, Sahsra

Antwort

2

Sie können nicht durchschnittlich Varchars.

Versuchen Sie, diese

SELECT [Source] , cast([Score] as decimal (10,2))--or whatever you need it to be 

INTO #Temp_Table 

FROM [MS].[dbo].[S_Survey] 

WHERE [data_Source] = 'USA' 
+0

[AVG] ist der Feldname nicht die Verwendung des Aggregats, also denke ich nicht, dass "Sie Varchars nicht berechnen können" gilt hier. –

+0

Danke für die Antwort. Aber es gibt ein Problem, wenn wir dezimal setzen .... Because es gibt einen einzelnen Wert 'NULL' in dieser Spalte. Wenn wir dezimal setzen, akzeptiert es nicht die 'NULL' ... Also, was soll ich jetzt tun ... – Shahsra

+0

[AVG] Spalte ist nur ein Name, den sie genommen haben ... sie sammeln nichts dort .... – Shahsra

0

Ich vermute, dass s.AVG ein Schwimmer ist und q.Source nicht. Dies würde dazu führen, dass SQL Server eine implizite Konvertierung für den JOIN ON s.[AVG] = q.[Source] ausführt und einer Ihrer Werte kein Zeichen ist. Sie sollten einen anderen Blick auf entweder my answer oder Martin's das letzte Mal, als Sie dieses Problem hatten.

z.B.

SELECT q.[Score] 
FROM [MS].[BE].[Survey] s 
WHERE like Score '%[^0-9.]%' 

UPDATE Wenn Sie die vier Zeichenwert ‚NULL‘ zu entfernen, brauchen Sie wahrscheinlich die folgenden (nicht getestet) tun

SELECT q.[Score] as Q --- Getting error in this place.Data Type is varchar (100). 

FROM [MS].[BE].[Survey] s 

LEFT OUTER JOIN #Temp_Table q on 

s.[AVG] = q.[Source] 
and q.[Source] <> 'NULL' 

Oder man konnte sie nicht in die # einfügen Temp_Table zu Beginn mit.

Oder Sie könnten diese Werte löschen, bevor Sie versuchen und JOIN.

Natürlich denke ich, warum verwenden Sie nicht einen numerischen Typ auf der #temp_table zu beginnen?

+0

Hallo Dank für die Erinnerung, aber ich habe bereits versucht, es funktioniert nicht in meinem Fall .... Da gibt es einige Werte, die "NULL" enthalten und einige sind 1,2,3 und einige sind 1,1,2,33,2.54 so. .. – Shahsra

+0

"<> 'NULL'" sieht nicht richtig aus. Es sollte 'IS NOT NULL' sein (es sei denn, der tatsächliche Wert ist 'null', was ein schlechtes Design ist). – IamIC

+0

@IanC Es ist das schlechte Design also meine Erklärung "Wenn Sie den vierstelligen Wert 'NULL" –