2016-06-06 37 views
-1

Ich habe zwei Tabellen in sql: tbl_Rooms (Room_Id, Room_Beds); tbl_AllocatedRooms (Room_Id, Bed_No);So lösen Sie diese Abfrage

Ich möchte das Ergebnis erhalten als: 1: Liste aller Zimmer, in denen kein Bett zugewiesen ist. 2: Liste der Zimmer, in denen ein oder mehrere Betten sind auch die Anzahl der verbleibenden Betten zugeordnet (zum Beispiel wenn ich ein Zimmer_ID = 2 in tbl_Rooms mit Betten = 5 und 2 dieser Betten zugewiesen sind, will ich die verbleibende Nummer bekommen von Betten)

Ich habe die erste gemacht, aber kann nicht herausfinden, wie man die zweite bekommt. Hier ist meine Abfrage für die ersten:

SELECT * INTO #tempUnAllocated FROM tbl_Rooms WHERE Room_Id NOT IN 
(SELECT Room_Id FROM tbl_Allocation); 
+0

Für Ihre zweite Abfrage möchten Sie keine Räume, in denen kein Bett zugewiesen wurde? Nur Zimmer mit mindestens einem Bett zugewiesen? Möchten Sie Räume einschließen, in denen alle Betten zugewiesen sind? –

+0

ja, nur die Zimmer, in denen ein oder mehrere (beliebig viele) Betten zugewiesen sind, und wollen auch die Anzahl der verbleibenden Betten in diesem Raum bekommen –

Antwort

0
SELECT A.room_id,A.room_beds,count(B.bed_no) as allocated_beds, 
(A.room_beds - count(B.bed_no)) as remaining_beds 
from tbl_rooms A LEFT JOIN tbl_AllocatedRooms B 
ON A.room_id = B.room_id 
group by A.room_id,A.room_beds 
having allocated_beds < room_beds 

können Sie die Lösung finden here.

0

Dies sollte es tun, obwohl eine Lösung mit einem CTE unter Verwendung könnte besser lesbar sein, wenn Ihr RDBMS unterstützt werden.

SELECT a.Room_Id, (SELECT Room_Beds FROM tbl_Rooms r WHERE r.Room_Id=a.Room_Id)-COUNT(*) AS unallocatedBeds 
FROM tbl_allocatedRooms a 
GROUP BY a.Room_Id 
Verwandte Themen