|
| (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
| |
|
|