PDA

Vollständige Version anzeigen : T SQL Aufgabe III


strausto
20.11.2007, 15:08
Anbei eine neue Aufgabe:


USE TEMPDB
go
if object_id('tblData') is not null
drop table tblData
Create table tblData ( id int identity(1,1) not null, col1 int not null)
go
insert tblData select 1
insert tblData select 2
insert tblData select 3
insert tblData select 4
insert tblData select 5
insert tblData select 6
insert tblData select 7
insert tblData select 8
insert tblData select 9
insert tblData select 10
go
DECLARE @Liste varchar(4000)


Ergebnis: (1 x 1; Eine Zeile!)

1 2 3 4 5 6 7 8 9 10 12 14 15 16 18 20 21 24 25 27 28 30 32 35 36 40 42 45 48 49 50 54 56 60 63 64 70 72 80 81 90 100


noch etwas anspruchsvoller:

USE TEMPDB
go
if object_id('tblData') is not null
drop table tblData
Create table tblData ( id int identity(1,1) not null, col1 int not null)
go
insert tblData select 1
insert tblData select 2
insert tblData select 3
insert tblData select 4
insert tblData select 5
insert tblData select 6
insert tblData select 7
insert tblData select 8
insert tblData select 9
insert tblData select 10
go
DECLARE @Liste varchar(4000)
DECLARE @int int
SET @int = 1



Resultset: (Eine Zeile!)

1 2 4 8 16 32 64 128 256 512


KEIN CURSOR! KEINE WEITEREN VARIABLEN! KEINE SCHLEIFEN!

Josef P.
20.11.2007, 19:47
KEIN CURSOR! KEINE WEITEREN VARIABLEN! KEINE SCHLEIFEN!
Auf die Lösung bin ich nun gespannt.
Ich hätte auf die Schnelle
SELECT @Liste = @Liste + xxx FROM TTTT
SELECT @Liste

verwendet. Aber das darf ich nun nicht, da keine Schleifen erlaubt sind.
... dann werde ich weitergrübeln müssen. ;)

strausto
21.11.2007, 10:44
Das ist keine Schleife im Sinne von While ...
Wenn Du mit Deinem Vorschlag zum Ziel kommst ist das ok.

Josef P.
21.11.2007, 11:42
Das ist keine Schleife im Sinne von While ...
Oben steht ja auch "KEINE SCHLEIFEN" und nicht "KEINE WHILE-SCHLEIFEN". ;)

Meine Lösung für "1 2 4 8 16 32 64 128 256 512"
DECLARE @Liste varchar(4000)
DECLARE @Liste varchar(4000)
SELECT @Liste = ISNULL(@Liste + ' ','') + convert(varchar(20), power(2, id-1)) FROM tblData
SELECT @Liste



BTW: Das ist imo nun ein Beispiel, bei dem man in Access/Jet VBA bemühen muss.

strausto
21.11.2007, 14:48
Gelingt Dir dass auch ohne die Funktion power?

strausto
21.11.2007, 14:50
Dann solltest Du auch

1 2 0 1 2 0 1 2 0 1

hinbekommen!
oder

1 2 3 4 5 0 1 2 3 4

Josef P.
21.11.2007, 19:50
Gelingt Dir dass auch ohne die Funktion power?

wenn ich eine zusätzliche Variable nutze schon. ;)

SET @INT = 1
SELECT
@Liste = ISNULL(@Liste + ' ','') + convert(varchar(20), @INT),
@INT = @INT * 2
FROM tblData
SELECT @Liste
Anm.:
Wenn man von der Bedingung
Erg = 2^(Wert aus Tabelle - 1) + ' ' + 2^(nächster Wert aus Tabelle - 1) + ... "
ausgeht, ist diese Lösung aber falsch.


Lösungen für '1 2 0 1 2 0 1 2 0 1' und '1 2 3 4 5 0 1 2 3 4'
SELECT
@Liste = ISNULL(@Liste + ' ','') + convert(varchar(20), id % 3)
FROM tblData
--bzw.
SELECT
@Liste = ISNULL(@Liste + ' ','') + convert(varchar(20), id % 6)
FROM tblData

strausto
22.11.2007, 11:01
Nicht schlecht!

DECLARE @Liste varchar(4000)
DECLARE @int int
SET @int = 1
wenn ich eine zusätzliche Variable nutze schon


dafür hatte ich die vorgesehen ;)

Vielleicht fällt Dir ja noch eine weitere Aufgabe ein. Ich muss zugeben, dass es schwierig ist Aufgaben zu konzipieren...

Josef P.
22.11.2007, 11:23
Vielleicht fällt Dir ja noch eine weitere Aufgabe ein. Ich muss zugeben, dass es schwierig ist Aufgaben zu konzipieren...

Ich könnte einmal eine Aufgage zum Thema Stücklistenauswertung (Auflösen einer Baumstruktur) erstellen.
Das wird zwar für dich keine Herausforderung sein, aber vielleicht machen einmal ein paar andere mit - das fehlt mir nämlich derzeit ein wenig.
... wo sind z.B. die Accessianer? ;)

strausto
22.11.2007, 16:38
Ja, ich vermisse hier auch die anderen Forum User.

Jasmin11
14.12.2007, 13:23
Wenn ich wüsste wie das geht und ich schon so weit wäre, würde ich gerne Mitmachen ;).

Aber soweit bin ich noch lange nicht :(

LG

Jasmin

_MD_
17.07.2008, 22:25
... lest mal auch

http://www.projectdmx.com/tsql/rowconcatenate.aspx

- insbesondere den Abschnitt "Non-reliable approaches".

Gruss - Mark