webForumDet fria alternativet

2 sammankopplade sql frågor?

6 svar · 2 220 visningar · startad av evilaid

evilaidMedlem sedan apr. 2009431 inlägg
#1

OKey.
så här är tanken att jag vill hämta rader från en tabell med ett visst villkor samtidigt som jag vill få med en summering från en annan tabell med villlkor från första tabellen.
så i princip är det följande två frågor jag vill slå ihop så jag får med summan för varje rad som hämtas.

Select ID,Name, Date from tbl_artikel where date < '2011-01-01' AND name= 'bosse'
Select Sum(amount),from tbl_lager where date < '2011-01-01' AND artid = tbl_artikel. id

KOllade på union men den verkar inte funkar, så det jag vill är att baka in andra frågan i den första om det går?

Mvh

ercizMedlem sedan maj 20011 880 inlägg
#2

Du måste skriva om det till en enda fråga. Använd GROUP BY id och använd JOIN för att hämta data från två tabeller.

UNION använder man bara när du hämtar samma kolumner från olika frågor. Se http://www.w3schools.com/sql/sql_union.asp

evilaidMedlem sedan apr. 2009431 inlägg
#3

men hur skriver man ihop frågor då? Alltså man ska kunna sätta ihop flera SELECT i en då va?

ercizMedlem sedan maj 20011 880 inlägg
#4

Hur menar du med skriva ihop två frågor? Jag antar att du vill skriva EN men mer komplicerade fråga.

Kolla hur man JOINar tabeller på http://www.w3schools.com/sql/sql_join.asp

Och hur man grupperar med GROUP BY: http://www.w3schools.com/sql/sql_groupby.asp

evilaidMedlem sedan apr. 2009431 inlägg
#5

Jo jag brukar använda Inner join m.m. men hur får jag den biten på den högra sidan att vara en summa till varje rad i den vänstra, alltså kodmässigt hur skulle det se ut?

Är väll dum men jag förstår det inte riktigt?

Hittade lite information om subquerys, verkar vara en smart grej? Ska testa lite

evilaidMedlem sedan apr. 2009431 inlägg
#6

Nu har jag trasslat som F*n med subquerys men får det inte att fungera, hittade ett exempel på Microsoft msdn kör på deras exempel men får det inte att fungera..
gjorde det så enkelt som möjligt så här:

select md.id, md.order_id, md.article, (select i.art_id, SUM(amount) from pd_inventory as i WHERE i.art_id = md.article group by i.art_id) AS am from pd_mounting_details AS md

tabellerna ser ut som:

pd_mounting_details
id
order_id
article

pd_inventory
art_id
amount

så nu vill jag lista alla rader från pd_mounting_details samtidigt som jag vill få med en summa för varje rad som består av summan av alla rader i pd_inventory där art_id = article från pd_mounting_details?

fattar inte varför inte frågan fungerar, får inget vettigt felmeddelande heller?

aasahMedlem sedan mars 20033 451 inlägg
#7

Den fråga du försöker använda har ingen FROM-klausul i den yttre frågan.

Du kan göra på två sätt:

1) Beräknar summan för varje unikt värde på de tre kolumnerna i MD nedan.
Slå ihop tabellerna, gruppera per all info om artikeln som du vill ta ut, räkna antal rader. 

SELECT
   MD.id,
   MD.order_id,
   MD.article,
   SUM(I.Amount)
FROM
   pd_mounting_details MD
   INNER JOIN pd_inventory I ON MD.article = I.art_id -- Förutsatt att det är så de "sitter ihop".
GROUP BY
   MD.id,
   MD.order_id,
   MD.article

2) Beräknar summan för varje I.art_id nedan. 
Skiljer sig från 1) om något artikel id förekommer med flera olika värden på de övriga kolumnerna i MD.

SELECT
   MD.id,
   MD.order_id,
   MD.article,
   X.TotalSum
FROM
   pd_mounting_details MD
   INNER JOIN (  -- Beräknar summan/artikel
      SELECT
          art_id,
          SUM(Amount) AS TotalSum
      FROM
          pd_inventory 
      GROUP BY
          art_id
   ) X ON MD.article = X.art_id  -- binder ihop värdet med övrig info om rätt artikel
Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb