/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Kompliceret SQL (syntes jeg)
Fra : Allan Schuster Bach


Dato : 26-10-03 12:12

Her til morgen, har jeg tilsyneladende fundet mine egen begræsninger i SQL,
for jeg sidder her med en forespørgelse, som jeg simplethen ikke kan finde
ud af.

Jeg har en tabel som jeg kalder TB_RAM_SEG som indeholder følgende kolonner
VirksomhedsID, Segmenter, Familie, Klasse, Vare
Der er tre rækker med følgende værdi
5 15 12 18 1
5 15 12 18 2
5 15 11 15 0

I en anden tabel som jeg kalder TB_RAM_Klasse, er der følgende kolonner
Segment, Familie, Klasse, Vare, titel som eksempelvis indeholder følgende

15 0 0 0 Brændelse
15 12 0 0 Smøremidler
15 12 18 0 Korrosionshæmmende
15 12 18 1 Fugtafviser
15 12 18 2 Rustfjerner
15 12 18 3 Rustbeskytteelse

Hele min ide var så følgende: (eksempelvis den første række i TB_RAM_SEG)
At lave et opslag i begge tabeller som retunere følgende
virksomheden = 5 (virksomhedsid)
og Segmentnavn = Brændelse (kræver at familie, klasse og vare alle er 0)
og Familienavn = Smøremidler (Kræver at segment = 15, familie = 12 og klasse
og vare er 0)
og Klassenavn = Korrosionshæmmende (kræver at segment = 15, familie = 12,
klasse = 18 og vare=0)
og varenavn = Fugtafviser (kræver at segment = 15, familie = 12, klasse = 18
og vare = 1)

Det skal køre i en SP på en MSSQL 2000

Forvirret!!. Det er jeg, og jeg kan overhovedet ikke få det til at virke.

Bach



 
 
Kristian Damm Jensen (27-10-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-10-03 07:44

"Allan Schuster Bach" <newskonto@schuster.dk> skrev i en meddelelse
news:bnga6q$1t51$1@news.cybercity.dk...
> Her til morgen, har jeg tilsyneladende fundet mine egen begræsninger i
SQL,
> for jeg sidder her med en forespørgelse, som jeg simplethen ikke kan finde
> ud af.
>
> Jeg har en tabel som jeg kalder TB_RAM_SEG som indeholder følgende
kolonner
> VirksomhedsID, Segmenter, Familie, Klasse, Vare
> Der er tre rækker med følgende værdi
> 5 15 12 18 1
> 5 15 12 18 2
> 5 15 11 15 0
>
> I en anden tabel som jeg kalder TB_RAM_Klasse, er der følgende kolonner
> Segment, Familie, Klasse, Vare, titel som eksempelvis indeholder følgende
>
> 15 0 0 0 Brændelse
> 15 12 0 0 Smøremidler
> 15 12 18 0 Korrosionshæmmende
> 15 12 18 1 Fugtafviser
> 15 12 18 2 Rustfjerner
> 15 12 18 3 Rustbeskytteelse
>
> Hele min ide var så følgende: (eksempelvis den første række i TB_RAM_SEG)
> At lave et opslag i begge tabeller som retunere følgende
> virksomheden = 5 (virksomhedsid)
> og Segmentnavn = Brændelse (kræver at familie, klasse og vare alle er 0)
> og Familienavn = Smøremidler (Kræver at segment = 15, familie = 12 og
klasse
> og vare er 0)
> og Klassenavn = Korrosionshæmmende (kræver at segment = 15, familie = 12,
> klasse = 18 og vare=0)
> og varenavn = Fugtafviser (kræver at segment = 15, familie = 12, klasse =
18
> og vare = 1)

Du giver os ikke mange chancer.

Du fortæller ikke, hvad den logiske sammenhæng i din database er, og du
fortæller os ikke hvorfor du netop ønsker at få de nævnte rækker ud.

(Det er nemt nok at få de specifikke rækker ud: fire selects (en pr. række)
kombineret i en union. Men det løser jo nok ikke det generelle problem.)

--
Kristian Damm Jensen
damm (at) ofir (dot) dk



Allan Schuster Bach (27-10-2003)
Kommentar
Fra : Allan Schuster Bach


Dato : 27-10-03 10:09

> Du giver os ikke mange chancer.

Det er skam også svært at foreklare, men jeg prøver lige igen.

Tabellen TB_RAM_Klasse er en tabel, der indeholder et klasse system, med
cirka 18.000 poster. Der er følgende kolonner (som skal benyttes)

Segment Familie Klasse Vare Titel
10 0 0 0 Levende dyr og
plantemateriale og tilbehør og forsyninger
14 0 0 0 Papirmaterialer og
produkter
15 0 0 0 Brændelse
15 12 0 0 Smøremidler
15 12 18 0 Korrosionshæmmende
15 12 18 1 Fugtafviser
15 12 18 2 Rustfjerner
15 12 18 3 Rustbeskytteelse

Tabellen er statisk, og der ændres ikke i den

I den anden tabel som jeg kalder TB_RAM_SEG , er der følgende kolonner
Virksomhedid Segment Familie Klasse Vare
5 15 12 18 1
5 15 12 18 2
5 15 11 15 0

Tabellen, indeholder oplysninger om, hvilken vare som den enkelte virksomhed
handler med
Hvis der nu havde stået
5 15 0 0 0, så handler virksomheden med Brændelse, og alle
underliggende kategorier, hvor segment er lige med 15.
5 15 12 0 0, Så handler virksomheden med smøremidler, og alle
underliggende kategorier, hvor segment er 15 og familie er 12.

Hele min ide (opgave), gå ud på, at omsætte disse talværdier, som er gemt i
TB_RAM_SEG til tekst.
Så eksempelvis at 5 15 12 18 1 (den første post i TB_RAM_SEG ), i tekst
kommer til se sådan ud.
5, Brændelse, Smøremidler, Korrosionshæmmende, Fugtafviser

>
> Du fortæller ikke, hvad den logiske sammenhæng i din database er, og du
> fortæller os ikke hvorfor du netop ønsker at få de nævnte rækker ud.

Jeg er kommet så langt
5 er virksomhedsid (nemt nok)
15 er brændelse. Findes ved at både familie, klasse og vare er lig med 0
12 er Smøremidler. Findes ved, at segment er 15, familie er 12, klasse og
vare er lig med 0
18 er Korrosionshæmmende. findes ved at segment er 15, familie er 12, klasse
er 18 og vare er lig med 0
1 er Fugtafviser. Findes ved at segment er 15, familie er 12, klasse er 18
og vare er 1

Følgende SQL er jeg fremkomet til, men den finder kun segment

CREATE PROCEDURE [dbo].[test]
@DBvirksomhedsid int
AS
SELECT TB_RAM_Klasse.Titel AS Segmentnavn
FROM TB_RAM_SEG INNER JOIN
TB_RAM_Klasse ON TB_RAM_SEG.Segment =
TB_RAM_Klasse.Segment
WHERE (TB_RAM_SEG.VirksomhedsID = 5) AND (TB_RAM_Klasse.Klasse = '00')
AND (TB_RAM_Klasse.Vare = '00') AND (TB_RAM_Klasse.Familie = '00')

Men er er jeg også kørt totalt fast

Håber at de var uddybning nok

Bach



Kristian Damm Jensen (27-10-2003)
Kommentar
Fra : Kristian Damm Jensen


Dato : 27-10-03 12:42

"Allan Schuster Bach" <newskonto@schuster.dk> skrev i en meddelelse
news:bninbj$2v8p$1@news.cybercity.dk...
> > Du giver os ikke mange chancer.
>
> Det er skam også svært at foreklare, men jeg prøver lige igen.

"Det dunkelt sagte, er det dunkelt tænkte" -- tidligere instruktor på
datalogi.

> Tabellen TB_RAM_Klasse er en tabel, der indeholder et klasse system, med
> cirka 18.000 poster. Der er følgende kolonner (som skal benyttes)
>
> Segment Familie Klasse Vare Titel
> 10 0 0 0 Levende dyr og
> plantemateriale og tilbehør og forsyninger
> 14 0 0 0 Papirmaterialer
og
> produkter
> 15 0 0 0 Brændelse
> 15 12 0 0 Smøremidler
> 15 12 18 0 Korrosionshæmmende
> 15 12 18 1 Fugtafviser
> 15 12 18 2 Rustfjerner
> 15 12 18 3 Rustbeskytteelse
>
> Tabellen er statisk, og der ændres ikke i den
>
> I den anden tabel som jeg kalder TB_RAM_SEG , er der følgende kolonner
> Virksomhedid Segment Familie Klasse Vare
> 5 15 12 18 1
> 5 15 12 18 2
> 5 15 11 15 0
>
> Tabellen, indeholder oplysninger om, hvilken vare som den enkelte
virksomhed
> handler med
> Hvis der nu havde stået
> 5 15 0 0 0, så handler virksomheden med Brændelse, og alle
> underliggende kategorier, hvor segment er lige med 15.
> 5 15 12 0 0, Så handler virksomheden med smøremidler, og alle
> underliggende kategorier, hvor segment er 15 og familie er 12.

Så vidt, så godt. Nu har vi vist en forståelse af, hvordan dien data ser d
og hvordan de skal tolkes.

> Hele min ide (opgave), gå ud på, at omsætte disse talværdier, som er gemt
i
> TB_RAM_SEG til tekst.

"Omsætte disse talværdier til tekst" er noget upræcist. Er det ikke netop,
hvad tabellen TB_RAM_Klasse gør?

> Så eksempelvis at 5 15 12 18 1 (den første post i TB_RAM_SEG ), i tekst
> kommer til se sådan ud.
> 5, Brændelse, Smøremidler, Korrosionshæmmende, Fugtafviser
>
> >
> > Du fortæller ikke, hvad den logiske sammenhæng i din database er, og du
> > fortæller os ikke hvorfor du netop ønsker at få de nævnte rækker ud.
>
> Jeg er kommet så langt
> 5 er virksomhedsid (nemt nok)
> 15 er brændelse. Findes ved at både familie, klasse og vare er lig med 0
> 12 er Smøremidler. Findes ved, at segment er 15, familie er 12, klasse og
> vare er lig med 0
> 18 er Korrosionshæmmende. findes ved at segment er 15, familie er 12,
klasse
> er 18 og vare er lig med 0
> 1 er Fugtafviser. Findes ved at segment er 15, familie er 12, klasse er
18
> og vare er 1
>
> Følgende SQL er jeg fremkomet til, men den finder kun segment
>
> CREATE PROCEDURE [dbo].[test]
> @DBvirksomhedsid int
> AS
> SELECT TB_RAM_Klasse.Titel AS Segmentnavn
> FROM TB_RAM_SEG INNER JOIN
> TB_RAM_Klasse ON TB_RAM_SEG.Segment =
> TB_RAM_Klasse.Segment
> WHERE (TB_RAM_SEG.VirksomhedsID = 5) AND (TB_RAM_Klasse.Klasse = '00')
> AND (TB_RAM_Klasse.Vare = '00') AND (TB_RAM_Klasse.Familie = '00')
>
> Men er er jeg også kørt totalt fast
>
> Håber at de var uddybning nok

Nix.

Hvad er dit input (parametrene til din procedure, er det korrekt, at det
skal være virksomhedsid og ikke andet)? Hvad er dit forventede output (et
eksempel på en linie er ikke nok til at giove en forståelse)?

Jeg *tror* at du er ude efter noget i retning af

select distinct
k1.titel as segment_titel
, k2.titel as familie_titel
, k3.titel as klasse_titel
, k4.titel as vare_titel
from tb_ram_seg s
join tb_ram_klasse k1
on s.segment = k1.segment
and k1.familie = '00'
and k1.klasse = '00'
and k1.vare = '00'
join tb_ram_klasse k2
on s.segment = k2.segment
and s.familie = k2.familie
and k2.klasse = '00'
and k2.vare = '00'
join tb_ram_klasse k3
on s.segment = k3.segment
and s.familie = k3.familie
and s.klasse = k3.klasse
and k3.vare = '00'
join tb_ram_klasse k4
on s.segment = k4.segment
and s.familie = k4.familie
and s.klasse = k4.klasse
and s.vare = k4.vare


--
Kristian Damm Jensen
damm (at) ofir (dot) dk



Allan Schuster Bach (27-10-2003)
Kommentar
Fra : Allan Schuster Bach


Dato : 27-10-03 16:45

> Nix.



> Hvad er dit input (parametrene til din procedure, er det korrekt, at det
> skal være virksomhedsid og ikke andet)? Hvad er dit forventede output (et
> eksempel på en linie er ikke nok til at giove en forståelse)?

Input kommer fra tabellen TB_ram_seg


>
> Jeg *tror* at du er ude efter noget i retning af

Det har du FULDSTÆNDIG ret i, jubii

> select distinct
> k1.titel as segment_titel
> , k2.titel as familie_titel
> , k3.titel as klasse_titel
> , k4.titel as vare_titel
> from tb_ram_seg s
> join tb_ram_klasse k1
> on s.segment = k1.segment
> and k1.familie = '00'
> and k1.klasse = '00'
> and k1.vare = '00'
> join tb_ram_klasse k2
> on s.segment = k2.segment
> and s.familie = k2.familie
> and k2.klasse = '00'
> and k2.vare = '00'
> join tb_ram_klasse k3
> on s.segment = k3.segment
> and s.familie = k3.familie
> and s.klasse = k3.klasse
> and k3.vare = '00'
> join tb_ram_klasse k4
> on s.segment = k4.segment
> and s.familie = k4.familie
> and s.klasse = k4.klasse
> and s.vare = k4.vare



Mange tak for hjælpen. Nu kan jeg så selv indføre de får rettelser der skal
til (en where sætning). Mange tak

Bach




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste