SELECT Frage

02/04/2009 - 18:13 von Markus Baechler | Report spam
Hallo NG,

ich habe eine Personal-Tabelle, in der ein Name und ein Bit-Flag gespeichert
wird (P_Name varchar, P_SpezialUeber int). In der Tabelle stehen dann z.B.
folgende Wert:

PersA, 1
PersB, 4
PersC, 3

Ich möchte mit einem SELECT je BIT einen Datensatz erzeugen:

PersA, 1
PersB, 4
PersC, 1
PersC, 2

Dazu habe ich versucht eine temporàre Tabelle erzeugt und diese dann mit
meiner Personal-Tabelle verknüpft. Leider komme ich nicht zu meinem
gewünschten Ergebnis:

DROP TABLE #tblModule
CREATE TABLE #tblModule(iMod INT)
INSERT #tblModule (iMod) VALUES (1)
INSERT #tblModule (iMod) VALUES (2)
INSERT #tblModule (iMod) VALUES (4)
INSERT #tblModule (iMod) VALUES (8)

SELECT P_Name, P_SpezialUeber , #tblModule.iMod, Mod2.iMod, Mod4.iMod
FROM Personal LEFT OUTER JOIN #tblModule ON (Personal.P_SpezialUeber&1) =
#tblModule.iMod
LEFT OUTER JOIN #tblModule AS Mod2 ON (Personal.P_SpezialUeber&2) =
Mod2.iMod
LEFT OUTER JOIN #tblModule AS Mod4 ON (Personal.P_SpezialUeber&4) =
Mod4.iMod

Heraus kommt:

PersA, 1, 1, NULL, NULL
PersB, 4, NULL, NULL, 4
PersC, 3, 1, 2, NULL


Hat jemand eine Idee, ob man das in einem SELECT-Statement überhaupt
umsetzen kann?

Vielen Dank,
Markus
 

Lesen sie die antworten

#1 Martin Wendel
02/04/2009 - 19:36 | Warnen spam
hi,

ganz versteh ichs nicht was du willst.
Ich nehme jetzt mal an das soll herauskommen

PersA, 1
PersA, 2
PersA, 4
PersA, 8
PersA, 16
PersB, 1
PersB, 2
PersB, 4
PersB, 8
PersB, 16
PersC, 1
PersC, 2
PersC, 4
PersC, 8
PersC, 16
usw...

Wieso machst du dir so schwer?

DECLARE @i as int
SET @i = 1

'Möglicherweise mit einem Coursor die Personen groupiert aus einer Tablle
lesen und für jede Person folgendes machen


Do While Schleife
Insert Into Personal-Tabelle Value ( Person, @i)
@i = @i * 2
'zweiten zàhler oder @i auf eine bestimmte höhe abfragen dann abbrechen
und dann vor dem nexten fetch des cursours
@i = 1


kurz aufgezeigt.
Ist das nicht das was du willst?


thx
Martin Wendel


"Markus Baechler" wrote:

Hallo NG,

ich habe eine Personal-Tabelle, in der ein Name und ein Bit-Flag gespeichert
wird (P_Name varchar, P_SpezialUeber int). In der Tabelle stehen dann z.B.
folgende Wert:

PersA, 1
PersB, 4
PersC, 3

Ich möchte mit einem SELECT je BIT einen Datensatz erzeugen:

PersA, 1
PersB, 4
PersC, 1
PersC, 2

Dazu habe ich versucht eine temporàre Tabelle erzeugt und diese dann mit
meiner Personal-Tabelle verknüpft. Leider komme ich nicht zu meinem
gewünschten Ergebnis:

DROP TABLE #tblModule
CREATE TABLE #tblModule(iMod INT)
INSERT #tblModule (iMod) VALUES (1)
INSERT #tblModule (iMod) VALUES (2)
INSERT #tblModule (iMod) VALUES (4)
INSERT #tblModule (iMod) VALUES (8)

SELECT P_Name, P_SpezialUeber , #tblModule.iMod, Mod2.iMod, Mod4.iMod
FROM Personal LEFT OUTER JOIN #tblModule ON (Personal.P_SpezialUeber&1) =
#tblModule.iMod
LEFT OUTER JOIN #tblModule AS Mod2 ON (Personal.P_SpezialUeber&2) =
Mod2.iMod
LEFT OUTER JOIN #tblModule AS Mod4 ON (Personal.P_SpezialUeber&4) =
Mod4.iMod

Heraus kommt:

PersA, 1, 1, NULL, NULL
PersB, 4, NULL, NULL, 4
PersC, 3, 1, 2, NULL


Hat jemand eine Idee, ob man das in einem SELECT-Statement überhaupt
umsetzen kann?

Vielen Dank,
Markus






Ähnliche fragen