För många rader
JAg har följande sql
<code>
ALTER PROCEDURE carOrderGetAllOrders
AS
SELECT TOP 1 co.carOrderID, co.manifacture, co.model, co.[year], co.customer, co.city, co.cellPhone,
co.mail, co.isApproved, co.approveDate, op.picName
FROM carOrder co
LEFT JOIN orderPic op
ON co.carORderID = op.orderID
</code>
I carOrder finns det bara en rad, i orderPic kan det finnas fler eller ingen. Hur skriver jag för att bara få ut en rad? Nu får jag ju ut en rad för varje bild.
Svara
Sv: För många rader
Kan det vara så att du saknar en ORDER BY sats?
Testa att sortera på din nyckel.
Svara
Sv: För många rader
För att få en rad per orderID behöver du något mer från orderPic tabellen att "joina" med.
Något som kan skilja ut en rad i orderPic.
T.ex en kolumn/fält med picturenumber, en siffra som anger i vilken ordning de sparats.
DÅ skulle din fråga bli så här:
<code>
SELECT
co.carOrderID,
co.manifacture,
co.model,
co.[year],
co.customer,
co.city,
co.cellPhone,
co.mail,
co.isApproved,
co.approveDate,
op.picName
FROM carOrder co
LEFT JOIN orderPic op ON (co.carORderID = op.orderID) AND (op.picturenumber = 1);
</code>
OBS! ovan var bara ett exempel.
Har du ingen bra sådan kolumn, kan du göra det själv i frågan.
Så här:
OBS! Gäller SQL Server 2005/2008.
<code>
;WITH getPicOrderID AS
(
SELECT
orderID,
picName,
ROW_NUMBER() OVER(PARTITION BY orderID ORDER BY picName) AS rn
FROM orderPic
)
SELECT
co.carOrderID,
co.manifacture,
co.model,
co.[year],
co.customer,
co.city,
co.cellPhone,
co.mail,
co.isApproved,
co.approveDate,
op.picName
FROM carOrder co
LEFT JOIN getPicOrderID op ON (co.carORderID = op.orderID) AND (op.rn = 1);
</code>
Svara