SQL - visa gemensamma join kolumnen

Permalänk
Medlem

SQL - visa gemensamma join kolumnen

Hej,
Har testat och läst men frågar er hjälp, går det att visa det gemensamma kolumnen när man använder join ??

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Alltså, visa CustomerID-kolumnen
http://www.w3schools.com/sql/trysql.asp?filename=trysql_selec...

Tacksam för svar

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Vet inte om jag förstått var problemet är men:

SELECT Customers.CustomerID,Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

Visar ju CustomerID som du är ute efter.....

Permalänk
Medlem

Tack funkade.
Hur får man så det visar alla som har samma info i customerid, som har mer än 2 rader.
Alltså, alla singel rader ska bort.
Försöker med having count men misslyckas med join tillsammans.

Tack på förhand

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk

select count(*),Customers.CustomerID
from Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
group by Customers.CustomerID
having count(4) > 1

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Det funkar inte

SELECT Employees.LastName, shipperid,Orders.OrderID AS NumberOfOrders FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
Group by lastname
Having count (lastname) >6
Order by lastname

Måste man använda sig av group by, vill ha de per rad och inte totalt??

Tack på förhand

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk

SELECT count(*),Employees.LastName, shipperid,Orders.OrderID FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
Group by Employees.LastName, shipperid,Orders.OrderID
Having count (*) >6
Order by Orders.OrderID

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

Går fortfarande inte
Den läser av infon från kolumnen och inte antal rader som jag vill.
Visar alltid 196 rader, bara Dodsworh som har mindre än 7 rader borde visas.
http://www.w3schools.com/sql/trysql.asp?filename=trysql_selec...

SELECT count(*),Employees.LastName, shipperid,Orders.OrderID FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
Group by Employees.LastName, shipperid,Orders.OrderID
Having count (*) <7
Order by Employees.lastname

Tack för att ni försöker hjälpa mig

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Testpilot

Känns som att det här är en programmeringsfråga och inget som har med Windows att göra, flyttar tråden till programmeringsdelen.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Skrivet av aaaaa:

Går fortfarande inte
Den läser av infon från kolumnen och inte antal rader som jag vill.
Visar alltid 196 rader, bara Dodsworh som har mindre än 7 rader borde visas.

Förstår jag dig rätt att du vill ha ut alla efternamn på anställda som har färre än 7 order?
I så fall testa följande:

SELECT count(1),Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) GROUP BY Employees.LastName HAVING count (1) < 7 ORDER BY Employees.lastname

Vill du dessutom visa alla order för de efternamnen kör följande:

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) WHERE e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) GROUP BY Employees.LastName HAVING count (1) < 7) ORDER BY e.lastname

Är det inte det du är ute efter så beskriv gärna mer vad du vill hämta.

Permalänk
Medlem

Tack så hemskt mycket.
Den nedre är vad jag är ute efter.
Nu gäller det bara att fatta vad du skrev, men det blir min läxa

Tack än en gång för all hjälp jag fått av er

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Tipsar om den här varianten: #11057582

SELECT * FROM Employees AS E INNER JOIN ( SELECT EmployeeID, COUNT(*) AS OrderCount FROM Orders GROUP BY EmployeeID HAVING COUNT(*) < 7 ) AS O ON O.EmployeeID = E.EmployeeId

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

Tipsar om den här varianten: #11057582

SELECT * FROM Employees AS E INNER JOIN ( SELECT EmployeeID, COUNT(*) AS OrderCount FROM Orders GROUP BY EmployeeID HAVING COUNT(*) < 7 ) AS O ON O.EmployeeID = E.EmployeeId

OffT: Vad sur jag lät på den tiden..

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Tack, men hur filtrerar man så att den bara visar max/min från det jag får upp ??
Jag la till where o.shipperid like '3', men den visar Buchanan också fast jag bara får upp 5 rader.
http://www.w3schools.com/sql/trysql.asp?filename=trysql_selec...

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID
FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID)
where o.shipperid like '3'
and e.LastName IN (
SELECT Employees.LastName
FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID)
GROUP BY Employees.LastName
HAVING count (1) > 7)
ORDER BY e.lastname

Tack igen för er hjälp

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem
Skrivet av aaaaa:

Tack, men hur filtrerar man så att den bara visar max/min från det jag får upp ??
Jag la till where o.shipperid like '3', men den visar Buchanan också fast jag bara får upp 5 rader.
http://www.w3schools.com/sql/trysql.asp?filename=trysql_selec...

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID
FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID)
where o.shipperid like '3'
and e.LastName IN (
SELECT Employees.LastName
FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID)
GROUP BY Employees.LastName
HAVING count (1) > 7)
ORDER BY e.lastname

Tack igen för er hjälp

Till exempel såhär om du vill ha max och min order id

SELECT max(o.OrderID) as maxOrderID,min(o.OrderID) as minOrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.shipperid like '3' and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) GROUP BY Employees.LastName HAVING count (1) > 7) GROUP BY o.EmployeeID,e.LastName,o.ShipperID ORDER BY e.lastname

Förklaring: Du kan gruppera på fält som är likadana, dvs o.EmployeeID,e.LastName,o.ShipperID. Sedan måste du ha någon funktion som get ett värde på de som inte är likadana, tex max eller min på OrderID som olika. Andra funktioner är sum, count osv.

ps, lägga in kod i code taggen! ds

Permalänk
Avstängd

Kör du TSQL (alltså MS SQL) så kan du göra mer avancerade saker med PARTITION osv. Typ:

;WITH a AS ( SELECT OrderID,ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY CustomerID) AS rn FROM Orders WHERE ShipperID = 3 ) SELECT * FROM a JOIN Customers...

Observera att det inte är fungerande script utan bara ett exempel.

Permalänk
Medlem

Har nu försökt själv i flera dagar men inte fixat det än.

Denna nedanför ska ju inte visa Buchanan, Fuller, Suyama för att det inte är mer än 7 rader, men den visar för att de har totalt över 7 rader, alltså de rader som inte syns är inräknat.
Sen ska det visa allt per rad, som det är just nu.
Snälla, vad är det som fattas ??

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.shipperid like '3' and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) GROUP BY Employees.LastName HAVING count (1) > 7) ORDER BY e.lastname

Tacksam för all hjälp

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem

Som frågan ser ut nu, så räknar du alla order och inte bara order med ShipperID = 3.

Lägg till en WHERE i din inline-select så bör det fungera...

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.ShipperID = 3 and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7) ORDER BY e.lastname

Visa signatur

as far as we can tell, the massacre went well...

Permalänk
Medlem
Skrivet av jovnas:

Som frågan ser ut nu, så räknar du alla order och inte bara order med ShipperID = 3.

Lägg till en WHERE i din inline-select så bör det fungera...

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.ShipperID = 3 and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7) ORDER BY e.lastname

Tack så hemskt mycket för hjälpen, nu funkar det
Trodde att man inte skulle behöva lägga in raden, då det redan stod
where o.shipperid = 3

Trevlig helg!

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Avstängd

Det är för att du har villkoret på COUNT i sub-selecten så det är där i man måste finnas över sju gånger och där definierade du inte vad id skulle vara. Det är ett lätt misstag. Ett tips är att det alltid är bättre att göra för mycket än för lite. Typ använd parenteser även för små saker, definiera ett alias för alla tabeller och använd de överallt även om exempelvis kolumnnamnet inte är tvetydigt mellan joinade tabeller, du kanske joinar på fler sen, definiera villkor överallt där du kan osv. Sen när du blir mer säker kan du börja effektivisera hur du skriver scripten. Intellisense hjälper rejält.

Permalänk
Medlem

Det går bra att göra det enkla men när man kommer till att filtrera ännu mer + join etc, så är man helt lost, hittar inte enkel förklaring på webben.

Går det att filtrera ytterligare en gång till att den visar 2 olika kolumner som har mer/mindre rader, alltså att den måste ha en till kriterie??
T.ex:
Laura har fler än 7 rader vilket stämmer, men har samma EmployeeID, går det att filtrera så att det måste finnas minst x antal OLIKA EmployeeID för att få fram resultatet ??
http://www.w3schools.com/sql/trysql.asp?filename=trysql_selec...

SELECT o.OrderID, o.EmployeeID, firstname, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7) ORDER BY e.lastname, shipperid

Har testat lägga till rader här o där men får inte till det.

Tack på förhand

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Legendarisk

SQL bör indenteras och formateras konsekvent precis som vilket annat språk som helst. Dina exempel blir svårlästa eftersom att de innehåller varierande konventioner och godtyckliga radbrytningar som döljer frågans struktur istället för att förtydliga den; det gör det svårare både för dig själv att skriva/underhålla och för andra att försöka hjälpa dig. Koden nedan är exakt samma som i din senaste fråga, den har bara nya radbrytningar och indrag. Det finns fortfarande mycket som kan ändras för att göra den mer lättläst, men du bör redan se en markant skillnad:

SELECT o.OrderID, o.EmployeeID, firstname, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7 ) ORDER BY e.lastname, shipperid

Kan du beskriva mer utförligt i vanlig text vad det är du behöver ha ut?

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Nedre koden visar alla Lastname som har mer än 7 rader i Shipperid 3, vilket är bra.
Men ifall EmployeeID inte var samma som Lastname, t.ex. Callahan hade både 8 och 5.
Går det att filtrera alla Last name som har mer än 7 i Shipperid 3, plus att de måste ha minst två olika EmployeeID ??
Lite svårt att testa nu för de har samma, men ifall de hade olika.

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.ShipperID = 3 and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7) ORDER BY e.lastname

Tack för all hjälp

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011

Permalänk
Medlem
Skrivet av aaaaa:

Nedre koden visar alla Lastname som har mer än 7 rader i Shipperid 3, vilket är bra.
Men ifall EmployeeID inte var samma som Lastname, t.ex. Callahan hade både 8 och 5.
Går det att filtrera alla Last name som har mer än 7 i Shipperid 3, plus att de måste ha minst två olika EmployeeID ??
Lite svårt att testa nu för de har samma, men ifall de hade olika.

SELECT o.OrderID, o.EmployeeID, e.LastName, o.ShipperID FROM Orders o INNER JOIN Employees e ON (o.EmployeeID=e.EmployeeID) where o.ShipperID = 3 and e.LastName IN ( SELECT Employees.LastName FROM Orders INNER JOIN Employees ON (Orders.EmployeeID=Employees.EmployeeID) WHERE ShipperID = 3 GROUP BY Employees.LastName HAVING count (1) > 7 AND count(distinct Employees.EmployeeID) >= 2) ORDER BY e.lastname

Tack för all hjälp

Låter som om detta är vad du är ute efter.

Permalänk
Medlem

Tack chrhem, funkar perfekt nu.

Tack

Visa signatur

Intel NUC8i5BEH - Iris Plus 655, i5 8259U 2,3GHz
MSI GE620DX-291NE - GT 555M, i5 2410M 2,3GHz
iPad Mini 4 & Macbook early 2011