2017-03-01 2 views
0

Ich habe zwei Tabellen (SimCard) und (Rental_SimCard)Inner Join mehr als 1 Zeile aus der zweiten Tabelle Rückkehr

Simkarte nur die Info Simkarte enthält wie id, Telefonnummer, simcardnumber.

Rental_SimCard einen Datensatz hinzugefügt hat für jede Simkarte Vermietung

Rental_SimCard - SimCardID - DateOut - DateIn 
0    - 1   - 1/3/2017 - 1/4/2017 
1    - 1   - 1/5/2017 - 1/6/2017 
2    - 1   - 1/7/2017 - NULL 
3    - 2   - 1/7/2017 - NULL 
4    - 3   - NULL  - NULL 

ich den Rekord von Simkarte angezeigt werden soll, die den MAX DateOut nur selbst wenn DateOut NULL ist

Der Kodex Ich bin derzeit mit

string sqlquery = "Select *, " + 
     "CASE WHEN MAX(CASE WHEN DateOut IS NULL THEN 1 ELSE 0 END) = 0 THEN " + 
     "MAX(DateOut) END AS MaxDateOut FROM SimCard INNER JOIN Rental_SimCard ON Rental_SimCard.SimCardID=SimCard.SimCardID " + 
     "GROUP BY (Every Single Column In the two tables) 

I-Gruppe durch jede Spalte, weil ich immer diesen Fehler

Die Spalte 'SimCard.SimCardID' ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Gerade jetzt meine Anfrage eine Kopie von der Simkarte Tabelle in der

Rental_SimCard neu erstellt für jeden Datensatz gibt die Ergebnisse Ich sollte

Rental_SimCard - SimCardID - DateOut(MAX) - DateIn - SimCardRecords... 
2    - 1   - 1/7/2017  - NULL - ... 
3    - 2   - 1/7/2017  - NULL - ... 
4    - 3   - NULL   - NULL - ... 

Antwort

1

Sie können auchverwenden

SELECT * 
FROM SimCard S 
CROSS APPLY (SELECT TOP 1 * 
      FROM Rental_SimCard R 
      WHERE R.SimCardId=S.SimCardId 
      ORDER BY DateOut DESC) T 
3
SELECT MAX(Rental_SimCard) 
    ,SimCard.SimCardId 
    ,MAX(DATEOut) 
    ,MAX(DateIn) 
    ,MAX(SimCardRecords) 
FROM SimCard 
INNER JOIN RENTAL_SIMCARD ON SimCard.SimCardId = Rental_SimCard.SimCardID 
GROUP BY SimCard.SimaCardId 
0

prüfen diese

select * from Rental_SimCard r inner join SimCard s 
on s.SimCardID=r.SimCardID 
where 
(DateOut = (select max(DateOut) from Rental_SimCard) 
or DateOut is null) 
sein wollen
1

einfach Make Inner Join und Gruppen von SimCardId

SELECT s.SimCardId 
    ,max(Rental_SimCard) 
    ,max(DATEOut) 
    ,max(DateIn) 
    ,max(SimCardRecords) 
FROM SimCard s 
INNER JOIN RENTAL_SIMCARD rs ON s.SimCardId = rs.SimCardID 
GROUP BY s.SimCardId 
Verwandte Themen