/ 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
(SQL Sætning) Kan det gøres smarter?
Fra : Henrik Absalon


Dato : 03-03-05 13:15

Hejsa

Jeg sidder og roder lidt med noget SQL søge sætninger, med de går hen og
bliver lidt lange, kan det laves lidt smarter?

--- Klip ---

SELECT 'Stel' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
SUM(minutter)/60+sum(timer) AS total FROM [Stel] WHERE [Dato] BETWEEN
#01-01-05# AND #01-31-05# AND Arbnr=272 UNION
SELECT 'Øsemaskine' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
SUM(minutter)/60+sum(timer) AS total FROM [Øsemaskine] WHERE [Dato] BETWEEN
#01-01-05# AND #01-31-05# AND Arbnr=272 UNION
SELECT 'Montage' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
SUM(minutter)/60+sum(timer) AS total FROM [Montage] WHERE [Dato] BETWEEN
#01-01-05# AND #01-31-05# AND Arbnr=272

--- Klip ---

Som det kan ses, laver jeg det samme opslag i flere tabeller, kan det laves
på en lidt smarter måde?


Henrik



 
 
Kristian Damm Jensen (04-03-2005)
Kommentar
Fra : Kristian Damm Jensen


Dato : 04-03-05 10:34


Henrik Absalon wrote:
> Hejsa
>
> Jeg sidder og roder lidt med noget SQL søge sætninger, med de går
hen og
> bliver lidt lange, kan det laves lidt smarter?
>
> --- Klip ---
>
> SELECT 'Stel' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Stel] WHERE [Dato] BETWEEN

> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Øsemaskine' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as
Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Øsemaskine] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Montage' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,

> SUM(minutter)/60+sum(timer) AS total FROM [Montage] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272
>
> --- Klip ---
>
> Som det kan ses, laver jeg det samme opslag i flere tabeller, kan det
laves
> på en lidt smarter måde?
>
>
> Henrik

Til en start kan det gøres læseligt:

SELECT 'Stel' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Stel
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Øsemaskine' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Øsemaskine
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Montage' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Montage
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


Dernæst kan man overveje (det vil afhænge af sammenhængen) om det
ikke kan betale sig at lave et view:

CREATE VIEW test AS
SELECT 'Montage' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Montage
UNION ALL
SELECT 'Øsemaskine' AS fromtab, Timer, Minutter, Dato, Arbnr FROM
Øsemaskine
UNION ALL
SELECT 'Stel' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Stel

(UNION ALL fordi der med sikkerhed ikke er nogen dubletter, og derfor
ingen grund til at bruge tid på at forsøge at fjerne dem.)

Endelig en select fra viewet:

SELECT fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM test
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


I praksis vill jeg nok overveje, om databasestrukturen ikke burde laves
om. Men det er jo ikke sikkert, at du hr den mulighed.

VH
Kristian


Henrik Absalon (04-03-2005)
Kommentar
Fra : Henrik Absalon


Dato : 04-03-05 14:20

Tak for denne lille lektion.

Jeg vil lige kigge lidt på det.
Henrik


"Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
news:1109928851.214745.90710@o13g2000cwo.googlegroups.com...

Henrik Absalon wrote:
> Hejsa
>
> Jeg sidder og roder lidt med noget SQL søge sætninger, med de går
hen og
> bliver lidt lange, kan det laves lidt smarter?
>
> --- Klip ---
>
> SELECT 'Stel' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Stel] WHERE [Dato] BETWEEN

> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Øsemaskine' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as
Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Øsemaskine] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Montage' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,

> SUM(minutter)/60+sum(timer) AS total FROM [Montage] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272
>
> --- Klip ---
>
> Som det kan ses, laver jeg det samme opslag i flere tabeller, kan det
laves
> på en lidt smarter måde?
>
>
> Henrik

Til en start kan det gøres læseligt:

SELECT 'Stel' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Stel
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Øsemaskine' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Øsemaskine
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Montage' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Montage
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


Dernæst kan man overveje (det vil afhænge af sammenhængen) om det
ikke kan betale sig at lave et view:

CREATE VIEW test AS
SELECT 'Montage' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Montage
UNION ALL
SELECT 'Øsemaskine' AS fromtab, Timer, Minutter, Dato, Arbnr FROM
Øsemaskine
UNION ALL
SELECT 'Stel' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Stel

(UNION ALL fordi der med sikkerhed ikke er nogen dubletter, og derfor
ingen grund til at bruge tid på at forsøge at fjerne dem.)

Endelig en select fra viewet:

SELECT fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM test
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


I praksis vill jeg nok overveje, om databasestrukturen ikke burde laves
om. Men det er jo ikke sikkert, at du hr den mulighed.

VH
Kristian



Henrik Absalon (04-03-2005)
Kommentar
Fra : Henrik Absalon


Dato : 04-03-05 14:29

Min database er en Access database, kan jeg oprette et "view" i en Access
db, og hvordan gør jeg det?

Henrik


"Kristian Damm Jensen" <kristiandamm@gmail.com> skrev i en meddelelse
news:1109928851.214745.90710@o13g2000cwo.googlegroups.com...

Henrik Absalon wrote:
> Hejsa
>
> Jeg sidder og roder lidt med noget SQL søge sætninger, med de går
hen og
> bliver lidt lange, kan det laves lidt smarter?
>
> --- Klip ---
>
> SELECT 'Stel' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Stel] WHERE [Dato] BETWEEN

> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Øsemaskine' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as
Min,
> SUM(minutter)/60+sum(timer) AS total FROM [Øsemaskine] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272 UNION
> SELECT 'Montage' AS fromtab, SUM(timer) AS Tim, SUM(Minutter) as Min,

> SUM(minutter)/60+sum(timer) AS total FROM [Montage] WHERE [Dato]
BETWEEN
> #01-01-05# AND #01-31-05# AND Arbnr=272
>
> --- Klip ---
>
> Som det kan ses, laver jeg det samme opslag i flere tabeller, kan det
laves
> på en lidt smarter måde?
>
>
> Henrik

Til en start kan det gøres læseligt:

SELECT 'Stel' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Stel
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Øsemaskine' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Øsemaskine
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272

UNION

SELECT 'Montage' AS fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM Montage
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


Dernæst kan man overveje (det vil afhænge af sammenhængen) om det
ikke kan betale sig at lave et view:

CREATE VIEW test AS
SELECT 'Montage' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Montage
UNION ALL
SELECT 'Øsemaskine' AS fromtab, Timer, Minutter, Dato, Arbnr FROM
Øsemaskine
UNION ALL
SELECT 'Stel' AS fromtab, Timer, Minutter, Dato, Arbnr FROM Stel

(UNION ALL fordi der med sikkerhed ikke er nogen dubletter, og derfor
ingen grund til at bruge tid på at forsøge at fjerne dem.)

Endelig en select fra viewet:

SELECT fromtab
, SUM(timer) AS Tim
, SUM(Minutter) as Min
, SUM(minutter)/60+sum(timer) AS total
FROM test
WHERE Dato BETWEEN #01-01-05# AND #01-31-05#
AND Arbnr=272


I praksis vill jeg nok overveje, om databasestrukturen ikke burde laves
om. Men det er jo ikke sikkert, at du hr den mulighed.

VH
Kristian



Jens Gyldenkærne Cla~ (04-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-03-05 14:57

Henrik Absalon skrev:

> Min database er en Access database, kan jeg oprette et "view" i en Access
> db, og hvordan gør jeg det?

Nej du kan ikke oprette et egentligt view, men du kan til gengæld gemme
en forespørgsel. Gemte forespørgsler kan bruges på samme måde som views.

NB: Læs gerne min signatur - det er besværligt at læse dine svar når du
bundciterer.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Henrik (04-03-2005)
Kommentar
Fra : Henrik


Dato : 04-03-05 16:55

"views" er det så noget man typisk vil bruge til en MySQL eller MS SQL?

Henrik



Jens Gyldenkærne Cla~ (04-03-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-03-05 17:11

Henrik skrev:

> "views" er det så noget man typisk vil bruge til en MySQL eller MS SQL?

Jeg kender ikke til MySQL, men views anvendes ofte i MSSQL (hvor man så
omvendt heller ikke kan gemme en forespørgsel på samme måde som i
Access).

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Kristian Damm Jensen (06-03-2005)
Kommentar
Fra : Kristian Damm Jensen


Dato : 06-03-05 20:13


Henrik wrote:
> "views" er det så noget man typisk vil bruge til en MySQL eller MS
SQL?

Nej. Views er en del af SQL-standarden (og har været det fra starten),
og burde være understøttet af ethvert ordentligt database-system.

Kristian


Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste