webForumDet fria alternativet

Crosstab query

2 svar · 194 visningar · startad av Mharlin

MharlinMedlem sedan juni 200277 inlägg
#1

Jag behöver göra en crosstab query, alltså få några av värdena att vara som column namn istället.

land           typ    funktion       antal

danmark        mp    operating       25
danmark        dp    operating       12
danmark        mp    sales           17
sverige        mp    operating       8
sverige        dp    operaing       10
sverige        mp    sales           19
sverige        dp    sales           15

så ser det ut nu... jag vill att det ska se ut såhär:

land          typ     operating    sales

danmark       mp     25               12
danmark       dp     12                0
sverige       mp     8                 19
sverige       dp      10               15

Jag behöver skriva det i SQL...
tacksam för all hjälp och idéer om hur jag kan lösa det...

agneta_rungMedlem sedan juli 2002138 inlägg
#2

Hej Magnus!

Så här kan man göra:

select a.land, a.typ, a.antal as funktion, b.antal as sales
from crosstabTest a, crosstabTest b
where a.land = b.land
and a.typ = b.typ
and a.funktion = 'operating'
and b.funktion = 'sales'
union
select a.land, a.typ, a.antal as funktion, 0
from crosstabTest a
where a.funktion = 'operating'
and not exists
(select * from crosstabTest b
where a.land = b.land
and a.typ = b.typ
and b.funktion = 'sales')
union
select a.land, a.typ, 0, a.antal as sales
from crosstabTest a
where a.funktion = 'sales'
and not exists
(select * from crosstabTest b
where a.land = b.land
and a.typ = b.typ
and b.funktion = 'operating')

Först tyckte jag man borde kunna göra det snitsigare med en inner join, men jag lyckas inte... Det här funkar i alla fall!

MharlinMedlem sedan juni 200277 inlägg
#3

Hjärtligt tack, det funkar perfekt :-)

Genererad på 366 ms · cache AV · v20260730165559-full.f96bc7eb