Jag har två tabeller i en Access-databas. Den första (Kunder) innehåller information om alla företagets kunder. Den andra tabellen (Åtgärder) innehåller information om vilka åtgärder som tagits varje månad. Tabellerna är kopplade med fältet kund_id. Skriv in vilkoret i left-joinvillkoret... Då får jag bara med de kunder som har en åtgärd under angivet år. Jag vill ha med även de kunder osm inte har haft någon åtgärd ännu. Nog kommer kunderna med det blir null på högersidan... Kund-tabellen innehåller kunder med kund_id 1-9. Som sagt Jag får felet "Kopplingsuttrycket stöds inte". Ledsen, men du har helt rätt detta stöds i mssql server Så här löste jag det (ingen snygg lösning, men den funkar): Order är ett reserverat ord och bör omges med "-tecken har jag för mig i SQL server eller [ och ] tecken som det är i access. Ordet ingår ju i sql "ORDER BY". Tack, det funkar klockrent!! Tänk på nästa gång att skriva frågan i Access-forumet om det är just Access det gäller.Komplicerad SQL-fråga
Jag vill nu ha ut en lista som innehåller företagsnamnet för ALLA kunder samt de åtgärder som utförts under 2003. De kunder som inte har någon åtgärd under året ska ändå visas.
Mitt problem är att de kunder som har åtgärder under 2002 men inte under 2003 inte visas i listan.
Kan någon hjälpa mig med detta så vore jag väldigt tacksam!!!
/ÅsaSv: Komplicerad SQL-fråga
exempel från northwind
select
companyname,
orderid,
orderdate
from
customers
left join orders on customers.customerid=orders.customerid and
year(orders.orderdate)=1997Sv: Komplicerad SQL-fråga
Sv: Komplicerad SQL-fråga
Kan du visa sql'en du kör?Sv: Komplicerad SQL-fråga
Ordertabellen innehåller följande info:
ord_id kund_id år månad status
1 1 2002 12 S
2 1 2002 11 S
3 2 2003 1 M
4 2 2003 2 S
5 4 2003 1 S
6 7 2003 1 M
Denna SQL resulterar i att jag får med alla kunder, men också alla order (även från 2002):
SELECT Kunder.foretag, Order.ar, Order.manad FROM Kunder LEFT JOIN Order ON Kunder.kund_id = Order.kund_id
Denna SQL resulterar i att jag endast får med order från 2003, men då visas inte de kunder som inte har några order under 2003:
SELECT Kunder.foretag, Order.ar, Order.manad FROM Kunder LEFT JOIN Order ON Kunder.kund_id = Order.kund_id WHERE Order.ar=2003
Förstår du mitt problem??Sv: Komplicerad SQL-fråga
SELECT Kunder.foretag, Order.ar, Order.manad FROM Kunder LEFT JOIN Order ON Kunder.kund_id = Order.kund_id and Order.ar=2003
villkoret
Order.ar=2003 i joinvillkoret istället för efter where!Sv: Komplicerad SQL-fråga
Ska detta funka i Access eller bara på SQL-server?Sv: Komplicerad SQL-fråga
i access får du nog göra en fråga som bara innehåller de åtgärder du vill ha med och sedan använda denna i left joinenSv: Komplicerad SQL-fråga
Jag lade till ett blank-fält i Kund-tabellen. Detta fält är alltid tomt.
Sedan gjorde jag en UNION-fråga där den första frågan bara väljer ut alla kunder, men använder blank-fältet till att få rätt antal fält till varje kund. Den andra frågan väljer ut de poster jag vill ha med från Order Joinad med Kunder. När jag slår ihop resultaten av dessa två frågor får jag med alla poster jag vill ha, men slipper de poster jag inte vill visa.
(SELECT Kunder.kund_id, blank as ar, blank as manad, blank as status
FROM Kunder) UNION (SELECT Kunder.kund_id, Order.ar, Order.manad, Order.status FROM Kunder INNER JOIN [Order] ON Kunder.kund_id = Order.kund_id
WHERE Order.ar=2003);
Tack för all hjälp!!!
/ÅSv: Komplicerad SQL-fråga
Access har den egenheten att då du har flera vilkor i ditt ON vilkor i en jon måste omge hela vilkoret med paranteser. Faktist mycket lurigt att klura ut.
Testa med:
SELECT Kunder.kund_id, [Order].ar, [Order].manad, [Order].status
FROM Kunder LEFT JOIN [Order] ON (Kunder.kund_id = [Order].kund_id AND [Order].ar=2003)
Funkar i alla fall i minn access databas jag testade mot. Har inte möjlighet att testa mot SQL-server. Men de bör även fungera där.Sv: Komplicerad SQL-fråga
/Å
PS. Tabellen heter inte Order i den skarpa databasen. Jag använde en förenklad struktur av tabellerna för att det skulle vara lättare för hjälpsamma människor att sätta sig in i mitt problem ;-)Sv: Komplicerad SQL-fråga