27. april 2005 - 10:41Der er
8 kommentarer og 1 løsning
subquery problem
jeg har denne stump sql: declare @users int declare @use int declare @id int set @id = 218 set @users =(select users from features where featureid = @id) set @use =(select count(*) from leases where id = @id)
select @id as id, @users as users, @use as use
som virker fint, jeg får et rowset ud med de data jeg gerne vil have ud, men nu vil jeg gerne have det udvidet. jeg har en anden tabel hvor i der står en masse id´s, og jeg vil gerne lave en select id from idtable og så køre overstående stump for hver record i idtable, men stadig have det hele sendt ud som et enkelt rowset.
hvis du så gerne vil have det hele i et query, kan du jo oprette en midlertidig tabel, som du indsætter data i, og afsluttende laver en select * på. herefter nedlægger du tabellen igen. på den måde vil du få det ønskede resultat
der må være en anden måde at samle det på, det er ikke holdbart at jeg skal til at oprette nye tabeller, jeg koder til et webinterface, så der vil komme flere brugere på sitet på samme tid.
En function er næsten det samme som en sp. Blot kan den netop det du efterlyser, kan kaldes fra hver række:
CREATE FUNCTION dbo.f_GetUse(@ID int) RETURNS int AS BEGIN DECLARE @use int select @use = count(*) from leases where id = @id RETURN @use END
CREATE FUNCTION dbo.f_GetUsers(@ID int) RETURNS int AS BEGIN DECLARE @users int select @users = users from features where featureid = @id RETURN @users END
Derefter kan du:
select id, dbo.f_GetUsers(id) as users, dbo.f_GetUse(id) as use FROM idtable
Hvis dette er rigtigt, så kan man faktisk gøre det sådan:
select idtable.id, (select features.users from features where features.featureid = idtable.id) as users, (select leases.use from leases where leases.featureid = idtable.id) as use FROM idtable
lavede min databasestruktur om så jeg kunne gøre det en del simplere
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.