webForumDet fria alternativet

Kombinera två recordset

ASP

3 svar · 405 visningar · startad av devotion

Medlem sedan jan. 20013 582 inlägg
Frågan#1

Hej,

Jag har två recordset som jag vill kombinera, men får inte till det...

'Skapa recordset
	Set Rs_O1=CreateObject("ADODB.Recordset")
	Set Rs_O2=CreateObject("ADODB.Recordset")
	
	'SQLfråga som hämtar UppdragsId från tblTask och användarsignatur från tblUsers beronde på vilken användare som är vald på en byggnad
	sSQL_O2 = " SELECT t.[Id] AS TaskId, t.TaskNr,u.[Sign] AS UserSign, u.[Name] AS UserName, ef.[Value] AS UserId" _
			& " FROM tblTask t" _
			& " INNER JOIN tblObject o" _
			& " ON t.Object2Nr = o.[Nr]" _
			& " INNER JOIN tblExtraFieldData ef" _
			& " ON o.[Id] = ef.OwnerId" _
			& " INNER JOIN tblExtrafieldDef ed" _
			& " ON ed.[Id ] = ef.FieldId" _ 
			& " INNER JOIN tblUsers u" _
			& " ON ef.[Value] = u.[Id]" _
			& " WHERE t.[UserSign] = '(kö)'" _
			& " AND t.[Status] = 0" _
			& " AND ed.OwnerType = 9" _
			& " AND ef.[Value] <> ''" _
			& " AND ed.Id = 10019"
			
	Rs_O2.Open sSQL_O2, Conn
	
	'SQLfråga som hämtar UppdragsId från tblTask och användarsignatur från tblUsers beronde på vilken  användare som är vald på en byggnad
	sSQL_O1 = " SELECT t.[Id] AS TaskId, t.TaskNr, u.[Sign] AS UserSign, u.[Name] AS UserName, ef.[Value] AS UserId" _
			& " FROM tblTask t" _
			& " INNER JOIN tblObject o" _
			& " ON t.Object1Nr = o.[Nr]" _
			& " INNER JOIN tblExtraFieldData ef" _
			& " ON o.[Id] = ef.OwnerId" _
			& " INNER JOIN tblExtrafieldDef ed" _
			& " ON ed.[Id ] = ef.FieldId" _ 
			& " INNER JOIN tblUsers u" _
			& " ON ef.[Value] = u.[Id]" _
			& " WHERE t.[UserSign] = '(kö)'" _
			& " AND t.[Status] = 0" _
			& " AND ed.ownertype = 8" _
			& " AND ef.[Value] <> ''" _
			& " AND ed.Id = 10002"

			
	Rs_O1.Open sSQL_O1, Conn

Logiken skall vara så här:

Om Rs_O2 ger träffar skall de posterna användas och de som resulterar från Rs_O1 skall ignoreras.

om bara Rs_O1 ger träffar skall skall de posterna användas.

Jag har provat en massa if-satser, men får inte till det....

Typ något sånt härnt:

If not Rs_O2.EOF then
    while not Rs_O2.EOF

       'använd resultatet från Rs_O2 
       Rs_O2.EOF.MoveNext
    Wend
else
    
    om båda resulterar poster använd Rs_O2.EOF

End if

Tack!
Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#2
if Rs_O2.eof then
     ' använd RS_O1
else
     ' använd RS_O2
end if

Eller precis tvärtom, krångla inte till det i onödan.

Medlem sedan jan. 20013 582 inlägg
#3

Hmmm...

Det kanske blev en SQL-fråga av det hela...

Flytta i så fall...

SELECT t.[Id] AS TaskId, 
	t.TaskNr,
	u.[Sign] AS UserSign, 
	u.[Name] AS UserName, 
	efO2.[Value] AS UserIdO2,
	efO1.[Value] AS UserIdO1
FROM tblTask t 
	INNER JOIN tblObject o2 
		ON t.Object2Nr = o2.[Nr] 
	INNER JOIN tblExtraFieldData efO2
		ON efO2.OwnerId = o2.[Id] AND efO2.[Value] <> ''
	INNER JOIN tblExtrafieldDef edO2 
		ON edO2.[Id ] = efO2.FieldId AND edO2.OwnerType = 9 AND edO2.Id = 10019
	
	INNER JOIN tblObject o1 
		ON t.Object1Nr = o1.[Nr] 
	INNER JOIN tblExtraFieldData efO1
		ON efO1.OwnerId = o1.[Id] AND efO1.[Value] <> ''
	INNER JOIN tblExtrafieldDef edO1 
		ON edO1.[Id ] = efO1.FieldId AND edO1.OwnerType = 8 AND edO1.Id = 10002

	INNER JOIN tblUsers u 
		ON efO2.[Value] = u.[Id] 
WHERE t.[UserSign] = '(kö)' 
	AND t.[Status] = 0

Resultatet blir:

16280	WWW000199	HL	Henrik Lindell	10010	9999
16283	WWW000200	HL	Henrik Lindell	10010	9999

Det borde bli en post till, men den visas ju inte eftersom där finns det inte värden på både efO2.[Value] AS UserIdO2 och efO1.[Value] AS UserIdO1

Hur skall det joinas för att det skall bli Null om det saknas?

Nästan iaf.,... :)

Mvh
Henrik

Medlem sedan juni 200032 967 inlägg
#4

Då ska du använda outer joins.

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)