Kongta
asked on
Compare two varchar-fields with two others
I need to set a UNLIKE filter in a procedure where I have to compare the combination of
dbo.ABRECHNUNG.symbol (varchar, 200) & dbo.Depot.DepotNummer (varchar, 53)
with the combination of
dbo.StopLoss.Symbol (varchar, 200) & dbo.StopLoss.DepotNummer (varchar, 53)
But by creating the first combination like
dbo.ABRECHNUNG.Symbol & dbo.ABRECHNUNG.DepotNummer AS Expr1
I get already an error saying that unvalid operator for this datatyp, Operator is boolean AND, typ is float
How to solve so I get a filter like
dbo.ABRECHNUNG.symbol & dbo.Depot.DepotNummer UNLIKE dbo.StopLoss.Symbol & dbo.StopLoss.DepotNummer
Thx
Kongta
dbo.ABRECHNUNG.symbol (varchar, 200) & dbo.Depot.DepotNummer (varchar, 53)
with the combination of
dbo.StopLoss.Symbol (varchar, 200) & dbo.StopLoss.DepotNummer (varchar, 53)
But by creating the first combination like
dbo.ABRECHNUNG.Symbol & dbo.ABRECHNUNG.DepotNummer
I get already an error saying that unvalid operator for this datatyp, Operator is boolean AND, typ is float
How to solve so I get a filter like
dbo.ABRECHNUNG.symbol & dbo.Depot.DepotNummer UNLIKE dbo.StopLoss.Symbol & dbo.StopLoss.DepotNummer
Thx
Kongta
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
If this does not help post the entire query that you are using.
ASKER
Hi SashP
I am just at the beginning of my query and started with this first field and got this error. Using
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer AS Expr1
shows me the error 'error on converting from datatyp varchar into float' ?
I am just at the beginning of my query and started with this first field and got this error. Using
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer
shows me the error 'error on converting from datatyp varchar into float' ?
Can you post the table schema? Go to query analyser and type sp_help ABRECHNUNG then post the results of the first result set.
Sash
Sash
Kongta,
The error that you are getting suggests that one of dbo.ABRECHNUNG.Symbol or dbo.ABRECHNUNG.DepotNummer is not a varchar but a float datatype.
The error that you are getting suggests that one of dbo.ABRECHNUNG.Symbol or dbo.ABRECHNUNG.DepotNummer
Why don't you try:
Select ABRECHNUNG.*, Depot.*
from ABRECHNUG, Depot
where cast(dbo.ABRECHNUNG.symbol as varchar) + cast(dbo.Depot.DepotNummer as varchar)
not in (Select cast(dbo.StopLoss.Symbol as varchar) + cast(dbo.StopLoss.DepotNum mer as varchar)
from StopLoss)
Select ABRECHNUNG.*, Depot.*
from ABRECHNUG, Depot
where cast(dbo.ABRECHNUNG.symbol
not in (Select cast(dbo.StopLoss.Symbol as varchar) + cast(dbo.StopLoss.DepotNum
from StopLoss)
ASKER
ABRECHNUNG dbo user table 2004-10-22 10:04:23.247
Symbol nvarchar no 100 yes (n/a) (n/a) Latin1_General_CI_AS
IX_ABRECHNUNG_3 nonclustered located on PRIMARY Symbol
UNIQUE (clustered) IX_ABRECHNUNG_1 (n/a) (n/a) (n/a) (n/a) TN
this is what I get ?
Symbol nvarchar no 100 yes (n/a) (n/a) Latin1_General_CI_AS
IX_ABRECHNUNG_3 nonclustered located on PRIMARY Symbol
UNIQUE (clustered) IX_ABRECHNUNG_1 (n/a) (n/a) (n/a) (n/a) TN
this is what I get ?
Are you asking a question?
Is this not what you wanted?
Stu
Is this not what you wanted?
Stu
ASKER
This was the answer to SashP, but I don't know if this is what he was looking for.
SQL_Stu, with your solution I'll get more than 1 million rst back. I have following problem to solve where I have the first two stops already and now looking for the third.
I have a table 'stopLoss' where I have to delete (works), update (works) and insert into (). The two first codes look like:
ALTER PROCEDURE StopLossCalc
AS
delete a
FROM StopLoss a
INNER JOIN (
SELECT dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol
FROM dbo.WERTSCHRIFTENFUNDAMENT ALDATEN RIGHT OUTER JOIN
dbo.WERTSCHRIFTENBASISINFO ON
dbo.WERTSCHRIFTENFUNDAMENT ALDATEN .Symbol = dbo.WERTSCHRIFTENBASISINFO .Symbol RIGHT OUTER JOIN
dbo.ABRECHNUNG ON dbo.WERTSCHRIFTENBASISINFO .Symbol = dbo.ABRECHNUNG.Symbol RIGHT OUTER JOIN
dbo.DEPOT ON dbo.ABRECHNUNG.DepotNummer = dbo.DEPOT.DepotNummer
GROUP BY dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol, dbo.ABRECHNUNG.ValorenNumm er
HAVING (dbo.ABRECHNUNG.ValorenNum mer > 20) AND SUM(dbo.ABRECHNUNG.Anzahl) = 0
) b ON b.DepotNummer = a.DepotNummer AND b.Symbol = a.Symbol
update a
set a.StopLoss = case when b.StopLossNew > a.StopLoss then b.StopLossNew else a.StopLoss end
FROM StopLoss a
INNER JOIN (
SELECT dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol , SUM(dbo.ABRECHNUNG.Anzahl) AS Position, dbo.WERTSCHRIFTENBASISINFO .Kurs,
dbo.DEPOT.StopLoss, dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.[l ange Volatilität],
dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.[k urze Volatilität],
CASE WHEN dbo.DEPOT.StopLoss = 1 THEN dbo.WERTSCHRIFTENBASISINFO .Kurs * dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.[l ange Volatilität]
ELSE NULL
END as StopLossNew
FROM dbo.WERTSCHRIFTENFUNDAMENT ALDATEN RIGHT OUTER JOIN
dbo.WERTSCHRIFTENBASISINFO ON
dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.Sy mbol = dbo.WERTSCHRIFTENBASISINFO .Symbol RIGHT OUTER JOIN
dbo.ABRECHNUNG ON dbo.WERTSCHRIFTENBASISINFO .Symbol = dbo.ABRECHNUNG.Symbol RIGHT OUTER JOIN
dbo.DEPOT ON dbo.ABRECHNUNG.DepotNummer = dbo.DEPOT.DepotNummer
GROUP BY dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol, dbo.WERTSCHRIFTENBASISINFO .Kurs, dbo.ABRECHNUNG.ValorenNumm er,
dbo.DEPOT.StopLoss, dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.[l ange Volatilität],
dbo.WERTSCHRIFTENFUNDAMENT ALDATEN.[k urze Volatilität]
HAVING (dbo.ABRECHNUNG.ValorenNum mer > 20)
) b ON b.DepotNummer = a.DepotNummer AND b.Symbol = a.Symbol
I would like now to INSERT INTO the recordsets, whith the same calculation above but ABRECHNUNG.Anzahl > 20 and
dbo.ABRECHNUNG.symbol + dbo.Depot.DepotNummer UNLIKE dbo.StopLoss.Symbol + dbo.StopLoss.DepotNummer
SQL_Stu, with your solution I'll get more than 1 million rst back. I have following problem to solve where I have the first two stops already and now looking for the third.
I have a table 'stopLoss' where I have to delete (works), update (works) and insert into (). The two first codes look like:
ALTER PROCEDURE StopLossCalc
AS
delete a
FROM StopLoss a
INNER JOIN (
SELECT dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol
FROM dbo.WERTSCHRIFTENFUNDAMENT
dbo.WERTSCHRIFTENBASISINFO
dbo.WERTSCHRIFTENFUNDAMENT
dbo.ABRECHNUNG ON dbo.WERTSCHRIFTENBASISINFO
dbo.DEPOT ON dbo.ABRECHNUNG.DepotNummer
GROUP BY dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol, dbo.ABRECHNUNG.ValorenNumm
HAVING (dbo.ABRECHNUNG.ValorenNum
) b ON b.DepotNummer = a.DepotNummer AND b.Symbol = a.Symbol
update a
set a.StopLoss = case when b.StopLossNew > a.StopLoss then b.StopLossNew else a.StopLoss end
FROM StopLoss a
INNER JOIN (
SELECT dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol , SUM(dbo.ABRECHNUNG.Anzahl)
dbo.DEPOT.StopLoss, dbo.WERTSCHRIFTENFUNDAMENT
dbo.WERTSCHRIFTENFUNDAMENT
CASE WHEN dbo.DEPOT.StopLoss = 1 THEN dbo.WERTSCHRIFTENBASISINFO
ELSE NULL
END as StopLossNew
FROM dbo.WERTSCHRIFTENFUNDAMENT
dbo.WERTSCHRIFTENBASISINFO
dbo.WERTSCHRIFTENFUNDAMENT
dbo.ABRECHNUNG ON dbo.WERTSCHRIFTENBASISINFO
dbo.DEPOT ON dbo.ABRECHNUNG.DepotNummer
GROUP BY dbo.DEPOT.DepotNummer, dbo.ABRECHNUNG.Symbol, dbo.WERTSCHRIFTENBASISINFO
dbo.DEPOT.StopLoss, dbo.WERTSCHRIFTENFUNDAMENT
dbo.WERTSCHRIFTENFUNDAMENT
HAVING (dbo.ABRECHNUNG.ValorenNum
) b ON b.DepotNummer = a.DepotNummer AND b.Symbol = a.Symbol
I would like now to INSERT INTO the recordsets, whith the same calculation above but ABRECHNUNG.Anzahl > 20 and
dbo.ABRECHNUNG.symbol + dbo.Depot.DepotNummer UNLIKE dbo.StopLoss.Symbol + dbo.StopLoss.DepotNummer
ASKER
SashP, I got it worked as I changed various datatypes. Thx.
ASKER
SashP, can I ask you:
Comparing does not work, when I use
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer = dbo.StopLoss.Symbol + dbo.StopLoss.DepotNummer
then I only get the 9 recordsets which is correct and indicates that all should work, but if I use
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer <> dbo.StopLoss.Symbol + dbo.StopLoss.DepotNummer
then it shows me everything, including the 9 above. How can I solve this issue?
Thx
Kongta
Comparing does not work, when I use
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer
then I only get the 9 recordsets which is correct and indicates that all should work, but if I use
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer
then it shows me everything, including the 9 above. How can I solve this issue?
Thx
Kongta
dbo.ABRECHNUNG.Symbol + dbo.ABRECHNUNG.DepotNummer
Then
dbo.ABRECHNUNG.symbol + dbo.Depot.DepotNummer != dbo.StopLoss.Symbol + dbo.StopLoss.DepotNummer
Cheers Sash