---Fråga1--: detta låter som en helt galen design, vad är det du ska göra? måste finnas någon bättre lösning... Tabellen är till för svaren i ett urval, varje kolumn är ett urvalsalternativ. Jag hade lagt alla svarsalternativ i en egen tabell. Men 3 kolumner i. Får inte det att fungera, skriver sql satsen så här typ Borde fungerar om du vill ha ut alla användare som har svarat:optimal prestanda + kunna flytta data i från en kolumn till en an
Håller på att göra om en tabell för bättre prestanda.
Tabellen består av 200 kolumner s1-s200, och kan antingen ha värdet 1 eller 0, datatype int eller?
en del av sql satsen ser ut så här (dynamisk)
<code>
(s1=1 or s2=1 or s3=1) and (s4=1 or s6=1) and (s7=1 or s8=1 or s9=1)
</code>
---Fråga2--:
Ska även kunna flytta data inbördes mellan kolumnerna
Exempel1: data i kolumn s1-s200 ska kunna flyttas till s2-s201
Exempel2: data i kolumn s1-s10 ska byta plats med s101-110
Det är c:a 8000 rader x 200 kolumner, och det är ingen engångsgrej..
Hur gör man det enklast?
Tack på förhandSv: optimal prestanda + kunna flytta data i från en kolumn till e
/JohanSv: optimal prestanda + kunna flytta data i från en kolumn till e
Tex
kolumn s1,s2,s3 är en urvalsfråga med möjlighet flera svar i.
1,0,1
Kolumn s4-s5 är en annan urvalsfråga med möjlighet med ett svar i.
1,0,0
Bättre lösningar är alltid välkommnaSv: optimal prestanda + kunna flytta data i från en kolumn till e
Skall svaret dessutom bara var 1/0 så är det rätt korkat att använda en INT eftersom den tar upp så mycket större plats än en BIT. Finns bra föklarat i de artiklar om SQL performence som översätts nu varför det är bättre för prestandan att använda BIT istället för INT, läs det?
1. AnvändarID
2. SvarsId
3. Svaret.
Typ
A|S|Svaret
--------
1|1|1
1|2|0
1|3|1
1|4|1
1|5|0
1|6|0
Hur du sedan skall flytta svaren verkar inte så smart, måste du verkligen det? Jag menar om jag svarat 1 på fråga 1 så borde ju inte det flyttas till fråga 2.
Men om du nu vill det så kan man använda UPDATE.
UPDATE [tabellen] SET [Svaret] = (SELECT [svaret] FROM [tabellen] WHERE [SvarsId] = 1) WHERE [SvarsId] = 2
Den kan säkert förbättras ordentligt men är ett sätt att göra det på...
- MSv: optimal prestanda + kunna flytta data i från en kolumn till e
[code]
select * from [tabell] INNER JOIN [URVALSTABELL] ON [TABELL].A = [URVALSTABELL].A where ((s=1 and svaret=1) or (s2=2 and svaret=1)) and ((s=3 and svaret=1))
[/code]
Eller tänker/skriver jag fel?Sv: optimal prestanda + kunna flytta data i från en kolumn till e
1 på fråga 1
ELLER
1 på fråga 2
OCH
1 på fråga 3
kanske du har fel på s2=2 eller det är bara skrivfel, det skall vara s=2
Testa annars denna
SELECT * FROM [TABELL_NAME] WHERE [ANVÄNDAREID_KOLUMN] IN (SELECT A FROM [URVALSTABELL_NAMN] WHERE (s=1 and svaret=1) or (s=2 and svaret=1)) and (s=3 and svaret=1))
- M