webForumDet fria alternativet

WHERE NOT?

Databaser & SQL

16 svar · 351 visningar · startad av Gimbo

Medlem sedan dec. 20001 626 inlägg
Frågan#1

Hejsan det är så att jag håller på och gör en uträkning av alla poster som finns i databasen, men jag vill inte ha med artiklar som startar med 88 i mina uträkningar, ett artikelnummer är på 4 siffror och låt oss sääga att artikelnumret är 8814 då ska den inte vara med i uträkningen men om den är 8714 så skall den det, någon som vet hur man gör detta?

SQL =" SELECT * FROM order WHERE NOT sku = left(rs("psku"),2)" ???

så kan man väl inte skriva eller??

Medlem sedan mars 20023 561 inlägg
#2

Jag tror det blir:

SELECT * FROM order WHERE sku <> left(rs("psku"), 2)"
Medlem sedan juni 200032 967 inlägg
#3

Det här borde väl fungera?

SQL =" SELECT * FROM order WHERE NOT sku LIKE '" & left(rs("psku"),2) & "%'"

Under förutsättning att jag förstått frågan rätt, och att fältet sku är av någon strängtyp.

Mvh

Medlem sedan dec. 20001 626 inlägg
#4

ok, jag glömde nämna att det är två kolumner jag inte ska ha med, så här ser min sql sats ut:

 mySQL="SELECT Month(orderDate) AS MonthValue, SUM(total) AS totalsum From orders WHERE NOT (psku = '" &left(rsTemp("psku"),2)& "' )AND NOT (orderstatus = 3) GROUP BY Month(orderdate) ORDER BY 1"

får felmeddelandet:


ADODB.Recordset error '800a0cc1' 

Item cannot be found in the collection corresponding to the requested name or ordinal.

kan detta felmeddelande beror på att jag har flera rader som är tomma, för att jag la till pSku kolumnen precis i databasen, alltså det har redan gjorts flera tusen ordrar och f o m idag så tillkommer en ny kolumn pSku där den matas med information f o m idag alltså??

/red

Medlem sedan juni 200032 967 inlägg
#5

Felmeddelandet betyder att du försöker skriva ut ett fält mha asp-kod, vars namn är antingen felstavat eller att fältet helt enkelt inte finns med i recordsetet.

mvh

Medlem sedan dec. 20001 626 inlägg
#6

men? den finns ju där, det är ju antingen på kolumnen pSku eller orderStatus den klagar och de finns i databas tabellen orders

Medlem sedan juni 200032 967 inlägg
#7

Ja, i tabellen kanske, men du hämtar ju inte de fälten till ditt recordset.

Medlem sedan dec. 20001 626 inlägg
#8

ok? och hur tycker du att det ska se ut i stället??
så här ser hela min kod ut:

 <% 
  mySQL="SELECT Month(orderDate) AS MonthValue, SUM(total) AS totalsum From orders WHERE NOT (pSku = '" &left(rsTemp("pSku"),2)& "') AND NOT (orderStatus = 3) GROUP BY Month(orderdate) ORDER BY 1"

set rsTemp = database.execute(mySQL)
%>
<b>Total omsättning bortsett från ... och ...:</b><br>
<%
do until rstemp.eof 
   pTotalSum	= rstemp("totalSum")
   pmonth	 	= rstemp("MonthValue")

%>

<%Response.Write MonthName(pmonth)%>:  <% response.write pTotalSum %> SEK<br>
<%
rstemp.MoveNext
loop   
%>
Medlem sedan juni 200032 967 inlägg
#9

På vilken rad får du felmeddelandet då? Är det på raden där du skapar SQL-frågan? Hur ser SQL-frågan ut där du fyller rsTemp då?

Medlem sedan dec. 20001 626 inlägg
#10

jag får fel på raden med mySQL, och vad menar du med att fylle rsTemp de fylls ju då jag sätter:
set rsTemp = database.execute(mySQL)

men jag använder ju rsTemp i sql frågan så hur ska jag göra för att fylla recordseten innan jag kör min sql-fråga?? man kan ju inte exekvera sql satsen innan den körs?

jag testade med detta men det fungerar inte:

 Set rsTemp = Server.CreateObject("ADODB.Recordset")
  mySQL="SELECT Month(orderDate) AS MonthValue, SUM(total) AS totalsum From orders WHERE NOT (pSku = '" &left(rsTemp("pSku"),2)& "') AND NOT (orderStatus = 3) GROUP BY Month(orderdate) ORDER BY 1"	
'set rsTemp = database.execute(mySQL)
rsTemp.Open, mySQL, database

men får samma felmeddelande

Medlem sedan juni 200032 967 inlägg
#11

Nej, du kan ju inte använda recordsetet innan du har fyllt det med något, som du ju gör strax efter. Dessutom; du har ju inte med fältet pSku i din SELECT, så då kommer ju inte det med i recordsetet i alla fall. Vad är det du vill göra egentligen?

Vilken jämförelse är det tänkt att du ska göra i WHERE-satsen? Vilket pSku ska inte vara lika som de två första bokstäverna i vilket pSku? Sig själv? Alltså måste pSku vara längre än två tecken, eller vad menar du?

Medlem sedan juni 200032 967 inlägg
#12

Använder du Access? Då kan du använda funktionerna left() och mid() direkt på fältvärdena i SQL-frågan. Det är nog den jämförelsen du får göra. Pseudokod:

Hämta si och så från tabellen där tecken 1 av artikelnumret inte är samma som tecken 2 i artikelnumret.

Är det inte det du vill göra? Vad är förresten fältet pSku för datatyp?

Medlem sedan dec. 20001 626 inlägg
#13

jag använder mig utav MSSQL7.0 och inte access, fältet har datatypen text. Produktnumret har 4 siffror xxxx och det jag vill göra är att INTE ta me d produkter som startar med 88xx i beräkningen.

Medlem sedan dec. 20001 626 inlägg
#14

går detta att lösa eller?

Medlem sedan juni 200032 967 inlägg
#15

Ja, det går att lösa, men börja med att byta datatyp på fältet! Hur långa artikelnummer ska du ha egentligen?

Byt till varchar med lämplig längd istället.

Nu när jag läser problemet, är det just 88 det inte får vara? Du har ju inte kommenterat mitt försök till pseudokod heller.

Om det är just 88 så ska man akta sig för att göra det för svårt för sig:

mySQL="SELECT Month(orderDate) AS MonthValue, SUM(total) AS totalsum From orders WHERE NOT (pSku LIKE '88%') AND NOT (orderStatus = 3) GROUP BY Month(orderdate) ORDER BY 1"

Annars, om det är enligt min pseudokod ovan, kanske det här kan fungera:

mySQL="SELECT Month(orderDate) AS MonthValue, SUM(total) AS totalsum From orders WHERE NOT (substring(pSku,1,1) = substring(pSku,2,1)) AND NOT (orderStatus = 3) GROUP BY Month(orderdate) ORDER BY 1"

Vilket passar?

Medlem sedan dec. 20001 626 inlägg
#16

man tackar och bockar @nders! det var den första varianten som jag var ute efter! en fråga, vad gör egentligen den här LIKE grejen?

Medlem sedan juni 200032 967 inlägg
254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)