Ein Problem mit Convert in Unterabfragen

Babsi

SQL-Guru
Beiträge
122
Hallo,

ich habe hier ein SQL String, das ich von Access in SQL übernehmen muss, jetzt äuft es auch soweit, nur wenn ich CONVERT VARCHAR einsetzen möchte, sagt er mir, das das in Unterabfragen nicht möglich sei, gibt es da eine Alternative?

SELECT
id_GP, GP_Bezeichnung, id_Asset,
Assetname,

IIF(Asset_Match = 'x',
IIF(IsNull(Cnt_SBA,'') <> '',
IIF(Min_SBA - CONVERT(Int,Min_SBA)>0,
CONVERT(DECIMAL,Min_SBA,2),Min_SBA) + ' | ' +
IIF(Max_SBA - CONVERT(Int,Max_SBA)>0,CONVERT(Decimal,Max_SBA,2),Max_SBA) + ' | ' + Cnt_SBA + ' | ' +
IIF(Durch_SBA - CONVERT(Int,Durch_SBA)>0,CONVERT(Decimal,Durch_SBA,2),Durch_SBA)
,'Nicht definiert'),'') AS Asset_SBA

FROM (SELECT
abf_AssetGP_Matrix_GP_Asset_Merged.id_GP,
abf_AssetGP_Matrix_GP_Asset_Merged.GP_Bezeichnung,
abf_AssetGP_Matrix_GP_Asset_Merged.id_Asset,
abf_AssetGP_Matrix_Assets.Assetname,
abf_AssetGP_Matrix_GP_Asset_Merged.Asset_Match,
abf_AssetGP_Matrix_Assets.Min_SBA,
abf_AssetGP_Matrix_Assets.Max_SBA,
abf_AssetGP_Matrix_Assets.Cnt_SBA,
abf_AssetGP_Matrix_Assets.Durch_SBA
FROM abf_AssetGP_Matrix_GP_Asset_Merged LEFT JOIN abf_AssetGP_Matrix_Assets
ON abf_AssetGP_Matrix_GP_Asset_Merged.id_Asset = abf_AssetGP_Matrix_Assets.id_Asset
) AS QRY_SUB;

Es liegt ja wohl an diesem Konstruckt:

CONVERT(DECIMAL,Min_SBA,2),Min_SBA) + ' | ' +
IIF(Max_SBA - CONVERT(Int,Max_SBA)>0,CONVERT(Decimal,Max_SBA,2),Max_SBA) + ' | ' + Cnt_SBA + ' | ' +
IIF(Durch_SBA - CONVERT(Int,Durch_SBA)>0,CONVERT(Decimal,Durch_SBA,2),Durch_SBA)

Wenn ich hier aber mit Convert Varchar versuche noch mal umzuwandeln bekomme ich die Meldung, das das in U-Abfragen nicht geht...
 
Werbung:
Warum sollte ein convert() in einer Unterabfrage nicht gehen, das klingt sonderbar. Was auffällt: Du konvertierst explizit in Decimal und verkettest dann mit einem Pipe, also müsste ja nochmal in Varchar konvertiert werden. Es findet also schon eine Konvertierung in Varchar statt.

Zeig doch mal den Code den du versucht hast und die genaue Fehlermeldung.
 
Ja, eben, wennich das dann mit CONVERT(VARCHAR,CONVERT(Int,Min_SBA)) versuche umzubauen bekomme ich die Fehlermeldung.
Das das nicht geht. dieses ganze Konstruckt ist völlig abgehoben, wieso wurde das so gebaut :-(
 
Wie Z.B. hier:

SELECT id_GP, GP_Bezeichnung, id_Asset, Assetname,
IIF(Asset_Match = 'x',
IIF(IsNull(Cnt_SBA,0) <> '',
IIF(CONVERT(VARCHAR,Min_SBA) - CONVERT(VARCHAR,Min_SBA)>0, CONVERT(VARCHAR,Min_SBA),CONVERT(VARCHAR,Min_SBA)) + ' | ' +
IIF(CONVERT(VARCHAR,Max_SBA) -CONVERT(VARCHAR,Max_SBA)>0,CONVERT(VARCHAR,Max_SBA),CONVERT(VARCHAR,Max_SBA) + ' | ' +
CONVERT(VARCHAR,Cnt_SBA) + ' | ' +
IIF(CONVERT(VARCHAR,Durch_SBA) - CONVERT(VARCHAR,Durch_SBA)>0,CONVERT(VARCHAR,Durch_SBA),CONVERT(VARCHAR,Durch_SBA))
),'Nicht definiert'),'') AS Asset_SBA
FROM
(SELECT abf_AssetGP_Matrix_GP_Asset_Merged.id_GP,
abf_AssetGP_Matrix_GP_Asset_Merged.GP_Bezeichnung,
abf_AssetGP_Matrix_GP_Asset_Merged.id_Asset,
abf_AssetGP_Matrix_Assets.Assetname,
abf_AssetGP_Matrix_GP_Asset_Merged.Asset_Match,
abf_AssetGP_Matrix_Assets.Min_SBA,
abf_AssetGP_Matrix_Assets.Max_SBA,
abf_AssetGP_Matrix_Assets.Cnt_SBA,
abf_AssetGP_Matrix_Assets.Durch_SBA
FROM abf_AssetGP_Matrix_GP_Asset_Merged LEFT JOIN abf_AssetGP_Matrix_Assets
ON abf_AssetGP_Matrix_GP_Asset_Merged.id_Asset = abf_AssetGP_Matrix_Assets.id_Asset
) AS QRY_SUB

Da gibts dann die Fehlermeldung:
Meldung 402, Ebene 16, Status 1, Zeile 4
Die Datentypen varchar und varchar sind im subtract-Operator inkompatibel.

Abschlusszeit: 2022-05-16T12:25:46.4573925+02:00
 
Ja das du einen Varchar nicht vom anderen subtrahieren kannst sollte klar sein, passe diese Zeilen an:
Code:
IIF(CONVERT(VARCHAR,Min_SBA) - CONVERT(VARCHAR,Min_SBA)>0, CONVERT(VARCHAR,Min_SBA),CONVERT(VARCHAR,Min_SBA)) + ' | ' +
IIF(CONVERT(VARCHAR,Max_SBA) - CONVERT(VARCHAR,Max_SBA)>0, CONVERT(VARCHAR,Max_SBA),CONVERT(VARCHAR,Max_SBA) + ' | ' +
CONVERT(VARCHAR,Cnt_SBA) + ' | ' +
IIF(CONVERT(VARCHAR,Durch_SBA) - CONVERT(VARCHAR,Durch_SBA)>0,CONVERT(VARCHAR,Durch_SBA),CONVERT(VARCHAR,Durch_SBA))
in
Code:
IIF(Min_SBA - Min_SBA>0, CONVERT(VARCHAR,Min_SBA),CONVERT(VARCHAR,Min_SBA)) + ' | ' +
IIF(Max_SBA - Max_SBA>0,CONVERT(VARCHAR,Max_SBA),CONVERT(VARCHAR,Max_SBA) + ' | ' +
CONVERT(VARCHAR,Cnt_SBA) + ' | ' +
IIF(Durch_SBA - Durch_SBA>0,CONVERT(VARCHAR,Durch_SBA),CONVERT(VARCHAR,Durch_SBA))
 
Werbung:
Zurück
Oben