GlitterMedlem sedan juli 2003465 inlägg Hej
Jar har en SQL fråga:
SELECT *
FROM karta
WHERE (forsamlingskod IS NULL)
ORDER BY lankod, CASE WHEN kommunkod IS NOT NULL THEN 1 ELSE 0 END, Namn
Funkar nästan bra...
Denna sorterar efter kommuner i bokstavsårdning efter länen men jag vill ha länen i bokstavsårdning med.
just nu är de sorterade i lankod.
Man vet att det är ett län p.g att kommunkod är null. kommunkod innehåller värde på både lankod och kommunkod.
Kör SQL 2000 Server
tohaMedlem sedan dec. 1999707 inlägg Hmm, är det inte bara att ta bort "lankod" i ORDER BY?
GlitterMedlem sedan juli 2003465 inlägg nepp då får jag alla län överst...
LarsGMedlem sedan dec. 200012 464 inlägg Var har du länsnamn lagrade då?
GlitterMedlem sedan juli 2003465 inlägg länsnamnen ligger i namn columnen tilsammans med kommun namnen...
tohaMedlem sedan dec. 1999707 inlägg Hur blir det om du gör nåt sånt här?
SELECT
lankod,
lan.namn AS LanNamn,
kommunkod,
namn AS KommunNamn
FROM
karta
inner join
karta lan
ON
lan.lankod = karta.lankod
and
karta.kommunkod IS NULL
WHERE
forsamlingskod IS NULL
ORDER BY
LanNamn,
CASE WHEN kommunkod IS NOT NULL THEN 1 ELSE 0 END,
KommunNamn
GlitterMedlem sedan juli 2003465 inlägg asså det är samma tabell som alt ligger i...
LarsGMedlem sedan dec. 200012 464 inlägg Vad betyder tillsammans med?
Kan du exemplifiera med datainnehåll?
tohaMedlem sedan dec. 1999707 inlägg
asså det är samma tabell som alt ligger i...
Jo, men om du ser så är lan-tabellen bara en alias; en inner join med sig själv för att få med lännamn för resp. kommun.
FROM
karta
inner join
[b]karta lan[/b]
ON
lan.lankod = karta.lankod
and
karta.kommunkod IS NULL
GlitterMedlem sedan juli 2003465 inlägg toha: det går inte får massa dubletter...
LarsG skrev:
Vad betyder tillsammans med?
Kan du exemplifiera med datainnehåll?
Namn |Kommunkod|Lankod
STOCKHOLMS LÄN |NULL |1
BOTKYRKA |27 |1
DANDERYD |62 |1
VÄSTRA GÖTALANDS LÄN |NULL |14
ALE |40 |14
ALINGSÅS |89 |14
Jesper TMedlem sedan nov. 20017 144 inlägg SELECT
distinct(lankod) ,
...
?
GlitterMedlem sedan juli 2003465 inlägg Går inte eftersom kommunkod innehåller samma lankod som länet som de ligger under
tohaMedlem sedan dec. 1999707 inlägg Den här då? :)
SELECT
lan.lankod,
lan.namn AS LanNamn,
karta.kommunkod,
karta.namn AS KommunNamn
FROM
karta
LEFT OUTER JOIN
karta lan
ON
lan.lankod = karta.lankod
and
lan.kommunkod IS NULL
WHERE
karta.kommunkod IS NOT NULL
UNION
SELECT
karta.lankod,
karta.namn,
null,
null
FROM
karta
WHERE
karta.kommunkod IS NULL
ORDER BY
LanNamn,
KommunNamn
GlitterMedlem sedan juli 2003465 inlägg Det funkar ju men blir det inte onödligt mycket information och segt?
Skall vara så optimalt som möjligt.
Annars så kan jag sätta 2 loppar i varandra för att loppa ut det på sidan som jag gjorde från början.
tohaMedlem sedan dec. 1999707 inlägg Det går ju garanterat snabbare att låta databasen returnera det korrekt än att loopa igenom ett resultat och villkorskontrollera varje rad.
Vad har du för index på tabellen?
GlitterMedlem sedan juli 2003465 inlägg inga i nuläget... men skall fixa det så småningom...
några förslag på indexering för bästa resultat?
tohaMedlem sedan dec. 1999707 inlägg Med det uttrycket så tror jag det ska räcka om du skapar ETT kombinerat index på kolumnerna:
kommunkod,
lankod,
namn
tohaMedlem sedan dec. 1999707 inlägg En liten rättning i uttrycket: Kör en UNION ALL, blir lite snabbare så om du är orolig för prestandan. Funkar i det här fallet.
GlitterMedlem sedan juli 2003465 inlägg Hur gör man denna till en view i databasen?
För det är la det bästa sättet för prestanda om det inte skall ändras något i databasen och uthämtningen?
får fel på ORDER BY och Union mär jag skall spara...
tohaMedlem sedan dec. 1999707 inlägg Du tjänar ingen prestanda på att skapa en vy av det. I en vy kan man inte ange ORDER BY. Det får man göra när man gör en select utifrån vyn. Jag skulle skapat en SP för det.
CREATE PROCEDURE proc_getLanKommunOrdered
AS
SELECT ........
GO