Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Problem med Order By och case/when

Postades av 2003-07-30 04:01:58 - Pelle Johansson, i forum sql-server/msde, Tråden har 8 Kommentarer och lästs av 837 personer

Hej, jag försöker att göra en order by - med en casesats som inte vill sig men sett flera exempel på nätet där det förekommer. Jag har en tabell innehållande två fält, ett numeriskt (int) och ett textfält (varchar). När jag vill sortera på varchar-fältet får jag följande fel:

<code>
sp_Annons_newtipsSorted 180,1

Server: Msg 245, Level 16, State 1, Procedure sp_Annons_newtipsSorted, Line 7
Syntax error converting the varchar value 'En bok om Macromedia Flash 4' to a column of data type int.
</code>

Exempel:

<code>
CREATE PROCEDURE sp_Annons_newtipsSorted
@kommunid int = null
,@sortfield int = 0
AS
set nocount on

select lngID, strDescShort, lngVisitors, dteCreated,
substring(strDescLong,1,350) as info, strLink,
strGroup +' - '+ subText as header, strFile,
strName, strEmail, annonstypid, kommunid, price
from
tblAnnons t,
tblAnnonsSubject ts,
tblAnnonsGroups tg
where
ts.lngSubjectID = t.lngSubjectID
and tg.lngGroupId = t.lngGroupID
and kommunid = @kommunid
and dateadd(m, 2, dteCreated) > dteCreated
order by
case @sortfield when 1 then strdescshort
when 2 then price
end
</code>

Någon som kan hjälpa mig förstå varför den försöker översätta varchar till integer?


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-30 08:40:05 - Kalle Dahlberg

Den kan bara returnera en datatyp från case-satsen. Vet inte varför den väljer int i detta fall, men den gör lika för mig.

Workaround kommer här =)

order by
case @sortfield when 1 then strdescshort
when 2 then ''
end,
case @sortfield when 2 then price
when 1 then 0
end


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-30 11:31:59 - Pelle Johansson

Kalle, helt underbart - det fungerade perfekt. Tack!


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 10:47:18 - Andreas Hillqvist

Det verkar ju inneffektivt att ha en Case sats i SQL-satsen. Det behövs väl egentligen inte?

Kan du inte skriva?
<code>
CREATE PROCEDURE sp_Annons_newtipsSorted
@kommunid int = null,
@sortfield int = 0
AS
SET NOCOUNT ON

IF @sortfield = 1
SELECT lngID, strDescShort, lngVisitors, dteCreated,
substring(strDescLong,1,350) as info, strLink,
strGroup +' - '+ subText as header, strFile,
strName, strEmail, annonstypid, kommunid, price
FROM
tblAnnons t LEFT JOIN
tblAnnonsSubject ts ON t.lngSubjectID = ts.lngSubjectID LEFT JOIN
tblAnnonsGroups tg ON t.lngGroupID = tg.lngGroupId
WHERE
kommunid = @kommunid
ORDER BY
strdescshort
ELSE IF @sortfield = 2
SELECT lngID, strDescShort, lngVisitors, dteCreated,
substring(strDescLong,1,350) as info, strLink,
strGroup +' - '+ subText as header, strFile,
strName, strEmail, annonstypid, kommunid, price
FROM
tblAnnons t LEFT JOIN
tblAnnonsSubject ts ON t.lngSubjectID = ts.lngSubjectID LEFT JOIN
tblAnnonsGroups tg ON t.lngGroupID = tg.lngGroupId
WHERE
kommunid = @kommunid
ORDER BY
price
</code>

Annars är det väl bättre att istället skapa två stored procedures. En som sorterar på beskrivning och en som sorterar på pris. Ger väl SQL servern bättre förutsättningar för att optimer och cacha resultat.

Vet inte om SQL experterna håller med mig? KAnske inte är så stor skilland?


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 11:20:27 - Kalle Dahlberg

Det har ingen större betydelse vad jag kan se. Varianten med if-satsen får en lite tyngre queryplan, men i praktiken är båda varianterna ungefär lika snabba. Det är nog mest en smaksak :)


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 11:27:29 - Andreas Hillqvist

Varför är det lika snabba? Hur Jämför det sig med två separata?


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 12:08:07 - Kalle Dahlberg

Ehh? Jag har testat några testfall med SET STATISTICS TIME ON, och ser att de verkar överensstämma väldigt bra i tid.


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 12:24:28 - Andreas Hillqvist

Har du gjort tester mot en indexerad kolumn och en oindexerad? Vet du hur vad som gäller för cachning av resultatet? osv...


Svara

Sv: Problem med Order By och case/when

Postades av 2003-07-31 12:48:55 - Kalle Dahlberg

Lite överdrivet... Gör det du om du vill. Vi har ju ändå inte alla uppgifter om hans struktur m.m


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 614
27 953
271 709
446
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies