SELECT CupId, FkMaterialId, FeedP17F, 'V'
FROM TmpTble
WHERE Vertikal = '1' AND CupId = X
UNION
SELECT CupId, FkMaterialId, FeedP17F, 'P'
FROM TmpTble
WHERE Parallell = '1' AND CupId = X
Så kanske?
Databaser & SQLur Databashanterare & SQL
8 svar · 277 visningar · startad av erka
Jag har en tabell med följande
CupId
Fk_MaterialId
Vertikal
Parallell
FeedP17F
Det är inte jag som har byggt databasen så jag kan tyvärr inte ändra om den hur som helst. Vad jag vill få ut är följande
SELECT CupId,FkMaterialId,FeedP17F WHERE Vertikal = '1' AND CupId = X FROM TmpTble
men jag vill lägga till så att jag i samma fråga får med
(SELECT FeedP17F WHERE Parallell = '1' AND CupId = X)
AS FeedP17F_Parallell
Jag vill ha detta för att kunna loppa igenom alla som har vertikal = '1' Men i samma record även få ut dess värde där Parallell = '1', Det finns nämligen 2 uppsättningar av allt det jag vill ha ut, en med parallell = 1 och en med vertikal = 1. Jag har provat med cross join samt union men inte fått det att fungera bra. Kanske är jag bara trött ;) Tacksam för all hjälp. Det är väll en liten join mot sig själv jag vill göra.
SELECT CupId, FkMaterialId, FeedP17F, 'V'
FROM TmpTble
WHERE Vertikal = '1' AND CupId = X
UNION
SELECT CupId, FkMaterialId, FeedP17F, 'P'
FROM TmpTble
WHERE Parallell = '1' AND CupId = X
Så kanske?
vad menar du med samma record? För mig som har så svårt att visualisera saker så underlättar det väldigt mycket om du visar exempel på det resultat du vill ha.
Är det något liknande detta?
CupId ! FkMaterialId ! FeedP17F ! Vertikal ! Parallel
-------------------------------------------------------------
47__ ! 11________ ! Cola_____! Ja____ ! Nej
47__ ! 12________ ! Cola_____! Ja____ ! Ja
47__ ! 13________ ! Cola_____! Nej___ ! Ja
Jag har säkert missförstått frågan, men varför funkar inte:
SELECT CupId, FkMaterialId, FeedP17F
FROM TmpTble
WHERE (Vertikal = '1' OR Parallell = '1') AND CupId = X;
Så var jag på väg att svara först, men så begrep jag inte vad erka var på jakt efter, så det blev en skum lösning istället. Skillnaden är ju den att det går inte att urskilja vad som motsvarar Vertikal och Parallell med din lösning.
Förlåt, den var lite luddigt skriven, var trött :(
Om jag skriver denna sqlfråga:
SELECT CupId,FkMaterialId,FeedP17F As FeedP174_Vertikal WHERE Vertikal = '1' AND CupId = X FROM TmpTble
Så får jag ut 3 kolumner i mina returnerade rader. Men om man kollar på datan som finns i databasen så finns det två rader med exakt samma CupId, den enda skillnaden är att på den ena är (förutom att de innehåller olika värden)
vertikal = 1
Parallell = NULL
och den andra med samma cupId har
Parallell = 1
vertikal = NULL
Jag vill ha 4 kolumner när jag får svaren returnerade, jag vill ha CupId,FkMaterialId,FeedP17F där vertikal = '1' men jag vill även ha FeedP17F (AS FeedP174_Parallell) där Parallell='1' och CupId är detsamma som det jag nyss fick ut.
Om vi säger att jag har 8 rader i min database, 4a uppsättningar med CupId så blir utdatat följande.
CupId ! MaterialId ! FeedP174_Vertikal ! FeedP174_Parallell
-----------------------------------------------------------------------------------
12__________3__________23.2______________24.7
13__________5__________25.2______________28.7
14__________7__________21.2______________36.7
15__________3__________20.2______________45.7
Alltså bara 4 returnerade rader fast det finns 8 rader i själva tabellen.
Klarare nu ?
tacksam
Jag förstår vad du vill göra, men jag vet inte om det går att göra en sådan fråga... jag får inte till det ivarjefall. Det säger väl inte så mycket dock ;)
select cupid,materialid,
(select FeedP174 from tmpTble
where cupid = t.cupid
and materialid = t.materialid
and vertikal = 1) as FeedP174_Vertikal,
(select FeedP174 from tmpTble
where cupid = t.cupid
and materialid = t.materialid
and parallell = 1) as FeedP174_Parallell
from tmpTble t
group by cupid,materialid
Men gud vad tänkte jag med, som vanligt :( Stort tack LarsG, du är en klippa men det vet du nog redan :)