Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Komplicerad SQL-fråga

Postades av 2003-05-09 10:14:24 - Åsa Boholm, i forum sql-server/msde, Tråden har 11 Kommentarer och lästs av 813 personer

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.

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!!!
/Åsa


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 10:23:20 - Nils-G Nordmark

Skriv in vilkoret i left-joinvillkoret...
exempel från northwind

select
companyname,
orderid,
orderdate
from
customers
left join orders on customers.customerid=orders.customerid and
year(orders.orderdate)=1997


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 10:26:09 - Åsa Boholm

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.


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 10:32:07 - Nils-G Nordmark

Nog kommer kunderna med det blir null på högersidan...
Kan du visa sql'en du kör?


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 10:52:43 - Åsa Boholm

Kund-tabellen innehåller kunder med kund_id 1-9.
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??


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 11:05:17 - Nils-G Nordmark

Som sagt
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!



Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 11:11:38 - Åsa Boholm

Jag får felet "Kopplingsuttrycket stöds inte".
Ska detta funka i Access eller bara på SQL-server?


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 11:26:30 - Nils-G Nordmark

Ledsen, men du har helt rätt detta stöds i mssql server
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 joinen


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 11:44:00 - Åsa Boholm

Så här löste jag det (ingen snygg lösning, men den funkar):

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!!!
/Å


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 12:16:28 - Andreas Hillqvist

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".

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.


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 12:48:17 - Åsa Boholm

Tack, det funkar klockrent!!
/Å

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 ;-)


Svara

Sv: Komplicerad SQL-fråga

Postades av 2003-05-09 13:48:21 - Christoffer Hedgate

Tänk på nästa gång att skriva frågan i Access-forumet om det är just Access det gäller.


Svara

Nyligen

  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 880
27 965
271 776
754
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies