| Author |
Topic |
|
Cyber_sql
Starting Member
5 Posts |
Posted - 2009-07-08 : 20:47:22
|
Hi Team,I have been working on an sql query to create a report and when I run the report to filter by HOLEID of type varchar, the query fails and I get the following error message:-Error converting data type varchar to float.The error happens at the end of the query on the WHERE clause which has the in statementI hope you guys can help on this.The SQL query is as below:-SELECT DRILLINGDATE, HOLEID, PROJECTCODE, CONTRACTCODE, COSTCODE, NAME, DESCRIPTION, AMOUNT, UNITS, COST, TotalCost, COSTFROM, COSTTO, MFROM, MTOFROM(select DRILLINGDATE, HOLEID, PROJECTCODE,CONTRACTCODE, COSTCODE, NAME, DESCRIPTION, AMOUNT, UNITS, COST, TotalCost = CASE WHEN COST IS NOT NULL AND AMOUNT IS NOT NULL THEN CAST(COST AS FLOAT)*CAST(AMOUNT AS FLOAT) ELSE 0 END, NULL AS COSTFROM, NULL AS COSTTO, NULL as MFROM, NULL as MTO from(select DD.DRILLINGDATE, DD.HOLEID, DD.PROJECTCODE,DD.CONTRACTCODE, DD.COSTCODE, DD.NAME,DA.DESCRIPTION,sum(cast(DD.VALUE as float)) AS AMOUNT, CD.VALUE AS COST, DA.UNITSfrom DRILLINGDETAIL DDINNER join CONTRACTDETAILS CDON DD.NAME = CD.NAMEAND DD.CONTRACTCODE = CD.CONTRACTCODEinner join DRILLINGACTIVITY DA on DD.NAME = DA.NAMEgroup by DD.DRILLINGDATE, DD.HOLEID, DD.PROJECTCODE,DD.CONTRACTCODE, DD.COSTCODE, DD.NAME,DA.DESCRIPTION,CD.VALUE, DA.UNITS)aunionselect DRILLINGDATE, HOLEID, PROJECTCODE, CONTRACTCODE, COSTCODE, DIAMETERTYPE AS NAME, NULL AS DESCRIPTION,MetresDrilled as AMOUNT, 'm' as units, COSTMETRE as COST, TotalCost, COSTFROM, COSTTO,MFROM = CASE WHEN STARTDEPTH > COSTFROM THEN STARTDEPTH WHEN STARTDEPTH > COSTFROM AND ENDDEPTH < COSTTO THEN COSTTO WHEN COSTFROM > 0 THEN COSTFROM - 1 ELSE COSTFROMEND,MTO = CASE WHEN ENDDEPTH > COSTTO THEN COSTTO WHEN ENDDEPTH < COSTTO THEN ENDDEPTH ELSE COSTFROMENDfrom (select a.*,DHD.STARTDEPTH, DHD.ENDDEPTH,DHD.ENDDEPTH - DHD.STARTDEPTH as MetresDrilled,DHD.DIAMETERTYPE,ATDC.COSTFROM,ATDC.COSTTO, ATDC.COSTMETRE,TotalCost = CASE WHEN DHD.ENDDEPTH > ATDC.COSTTO AND DHD.STARTDEPTH > ATDC.COSTFROM THEN SUM((ATDC.COSTTO - DHD.STARTDEPTH)*ATDC.COSTMETRE) WHEN DHD.ENDDEPTH < ATDC.COSTTO AND DHD.STARTDEPTH < ATDC.COSTFROM THEN SUM((DHD.ENDDEPTH -(ATDC.COSTFROM-1))*ATDC.COSTMETRE) WHEN DHD.ENDDEPTH < ATDC.COSTTO AND DHD.STARTDEPTH > ATDC.COSTFROM THEN SUM(ATDC.COSTMETRE*(DHD.ENDDEPTH-DHD.STARTDEPTH)) WHEN DHD.ENDDEPTH > COSTTO THEN SUM(ATDC.COSTMETRE*(ATDC.COSTTO - DHD.STARTDEPTH)) ELSE sum(ATDC.COSTMETRE*(DHD.ENDDEPTH-DHD.STARTDEPTH))ENDfrom (select DD.DRILLINGDATE, DD.SHIFT, DD.HOLEID, DD.PROJECTCODE, DD.CONTRACTCODE, DD.COSTCODE,MIN(CASE WHEN DD.NAME = 'DrillFrom' then DD.VALUE else NULL end) AS DrillFrom,MIN(CASE WHEN DD.NAME = 'DrillTo' then DD.VALUE else NULL end) as DrillToFROM DRILLINGDETAIL DDgroup by DD.DRILLINGDATE, DD.SHIFT, DD.HOLEID, DD.PROJECTCODE, DD.CONTRACTCODE, DD.COSTCODE)ainner joinDRILLHOLEDIAMETER DHDon a.DrillFrom <= DHD.STARTDEPTHand a.DrillTo >= DHD.ENDDEPTHinner join AT_DRILLCOST ATDCon DHD.DIAMETERTYPE = ATDC.DIAMETERTYPEand a.CONTRACTCODE = ATDC.CONTRACTCODEgroup by DRILLINGDATE,SHIFT, a.CONTRACTCODE, a.DrillFrom, a.DrillTo,a.HOLEID, a.PROJECTCODE,COSTCODE,DHD.ENDDEPTH - DHD.STARTDEPTH,DHD.DIAMETERTYPE, ATDC.COSTMETRE,DHD.STARTDEPTH, DHD.ENDDEPTH,ATDC.COSTFROM,ATDC.COSTTO) bWHERE METRESDRILLED IS NOT NULL AND METRESDRILLED >= 0 AND METRESDRILLED = (CAST(DRILLTO AS FLOAT)-CAST(DRILLFROM AS FLOAT)))Cwhere CONTRACTCODE IN('DTQ_2009')AND CAST(HOLEID AS VARCHAR) IN('SCR0008', 'SCR0009') --Error here AND TOTALCOST > 0order by CONTRACTCODE,DRILLINGDATE ASC, HOLEID, PROJECTCODE, MFROM ASC, DESCRIPTION DESC |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2009-07-08 : 20:52:05
|
try casting or converting the totalcost in 2nd union query to float KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
Cyber_sql
Starting Member
5 Posts |
Posted - 2009-07-08 : 21:06:00
|
Changed the Totalcost to :-AND CAST(TOTALCOST as FLOAT) > 0in the where clause, but still no luck.Its weird, because when I change it toAND HOLEID LIKE ('SCR000%')I get all the results  |
 |
|
|
Cyber_sql
Starting Member
5 Posts |
Posted - 2009-07-08 : 21:09:28
|
| Help anyone? |
 |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2009-07-08 : 21:09:54
|
check the value of any other string column that converts to float either by implicit or explicitly. Any string that not able to convert to float ? KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
Cyber_sql
Starting Member
5 Posts |
Posted - 2009-07-08 : 21:25:29
|
| Checked all types and they all fine except for the holeid stuff .... Could it be a bug in SQL server? |
 |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2009-07-08 : 21:31:02
|
what's the data type of HOLEID ? KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
Cyber_sql
Starting Member
5 Posts |
Posted - 2009-07-08 : 23:52:07
|
| Thanks guys, I worked it out. Had to re-structure the union between the two query |
 |
|
|
|
|
|