Jesper TMedlem sedan nov. 20017 144 inlägg Får inte detta att funka, det funkar om jag skriver in valutan statiskt. Vad kan fela?
ALTER PROCEDURE Testprocedur
(
@Curr varchar(3)
)
AS
exec('SELECT s.id,s.province,s.city,c.cNameEN,
max(pricew)*r.'+@curr+',
min(pricew)*r.'+@curr+' FROM search1 AS s
INNER JOIN countries AS c
ON s.country=c.id
INNER JOIN pricecategory as p
ON s.id=p.shid
INNER JOIN rates as r
ON r.currency=p.currency
GROUP BY s.id,s.province,s.city,c.cNameEN,r.'+@curr)
@ndersMedlem sedan juni 200032 969 inlägg Felmeddelande? Hur ser den "färdiga" dynamiska SQL-frågan ut?
Jesper TMedlem sedan nov. 20017 144 inlägg Nej, vips så funkade det utan att jag behövde göra något.
Märkligt. Men kör jag frågan i access så verkar den inte returnera något var tredje gång ungefär. Kör jag den däremot direkt på asp-sidan eller i EM så verkar det funka ser jag nu.
LarsGMedlem sedan dec. 200012 464 inlägg Varför har du en sådan datamodell? Det blir ju bara besvärligt och ineffektivt, t.ex. om du vill lägga till en ny valuta så måste du definiera om din tabell.
Jesper TMedlem sedan nov. 20017 144 inlägg Tanken var att valutorna skulle ligga i en "matris" med en x och en y axel för att kunna räkna om valutan.
Visst, den ny kolumn måste läggas till när man lägger till en valuta och det kanske inte är helt lyckat.
Vilken modell föreslår du?
Är det idé att bara köra tre kolumner ex.
SEK SEK 1
SEK EUR 0.11
SEK USD 0.13
EUR SEK 9
EUR EUR 1
Osv. Så kan jag kanske göra något sådant här?
SELECT s.id,s.province,s.city,c.cNameEN,
min(p.pricew)*r.rate,
max(p.pricew)*r.rate
FROM search1 AS s
INNER JOIN countries AS c ON s.country=c.id
INNER JOIN pricecategory as p ON s.id=p.shid
INNER JOIN ratesnew as r ON r.currencyF=p.currency
WHERE r.currencyT = @curr
GROUP BY s.id,s.province,s.city,c.cNameEN,r.rate
Jesper TMedlem sedan nov. 20017 144 inlägg Den modellen verkar ju funka bra.
Tilläggsfråga:
Jag skulle vilja lägga till maxpris också och detta måste ju även vara baserat på currency-variablen.
Skall jag lägga det i en having-klausul eller var skall det in?
Jag har testat att lägga till det i where men det verkar inte funka:
AND min(p.pricew)<1500*r.rate
Alltså om valutan är 'SEK' så skall bara poster där min(pricew) understiger 1500kr hämtas.
An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.
Jesper TMedlem sedan nov. 20017 144 inlägg Om jag lägger in den i having så blir det ingen skillnad. (som att inte ha med den)
UlfTMedlem sedan maj 20018 027 inlägg -> Jesper T
Angående valutorna, gör det så enkelt som möjligt. Du kan bestämma dig för att du hela tiden utgår från en viss valuta som standard, och alla andra valutor anger du utifrån denna standard. Låt oss säga att denna standard är SEK. Då anges varje annan valuta utifrån dess värde räknat i SEK. Vill man konvertera mellan EUR och USD, går man via mellansteget att konvertera till SEK. Då skulle din valutatabell kunna se ut på följande vis:
Valuta Värde (i SEK)
EUR 9.2
USD 7.5
osv.
Jesper TMedlem sedan nov. 20017 144 inlägg Ok.
På vilket sätt skulle det underlätta sql-frågan?
UlfTMedlem sedan maj 20018 027 inlägg
Jesper T skrev:
Ok.
På vilket sätt skulle det underlätta sql-frågan?
Det vet jag inte. Men det underlättar datastrukturen. Då är det i allmänhet lättare att komma på frågor som fungerar.
Jesper TMedlem sedan nov. 20017 144 inlägg Tips på hur jag skulle kunna gå vidare önskas här. :)