Я пытался полностью понять, присоединяется на следующем примере я сконструированной в сервере SQLПонимание соединяется с примером
DECLARE @tablePlace TABLE (ID INT, someplace varchar(10))
DECLARE @tableType TABLE (ID INT, sometype varchar(10))
DECLARE @tableOrders TABLE (ID INT, type int , place int)
INSERT INTO @tablePlace (ID, someplace) values (1,'Place A')
INSERT INTO @tablePlace (ID, someplace) values (2,'Place B')
INSERT INTO @tableType (ID, sometype) VALUES (1,'Type 1')
INSERT INTO @tableType (ID, sometype) VALUES (2,'Type 2')
INSERT INTO @tableType (ID, sometype) VALUES (3,'Type 3')
INSERT INTO @tableType (ID, sometype) VALUES (4,'Type 4')
INSERT INTO @tableOrders (ID, place, type) values (1 , 1 , 1) -- PLACE A TYPE 1
INSERT INTO @tableOrders (ID, place, type) values (2 , 1 , 2) -- PLACE A TYPE 2
INSERT INTO @tableOrders (ID, place, type) values (3 , 2 , 2) -- PLACE B TYPE 2
Теперь то, что я пытаюсь сделать, это связать три таблицы, чтобы получить следующее результат
╔═════════╦════════╦═══════╗
║ PLACE ║ TYPE ║ COUNT ║
╠═════════╬════════╬═══════╣
║ PLACE A ║ TYPE 1 ║ 1 ║
║ PLACE A ║ TYPE 2 ║ 1 ║
║ PLACE A ║ TYPE 3 ║ 0 ║
║ PLACE A ║ TYPE 4 ║ 0 ║
║ PLACE B ║ TYPE 1 ║ 0 ║
║ PLACE B ║ TYPE 2 ║ 1 ║
║ PLACE B ║ TYPE 3 ║ 0 ║
║ PLACE B ║ TYPE 4 ║ 0 ║
╚═════════╩════════╩═══════╝
Так что я пытаюсь сделать, это связать два места и показать количество каждого типа в соответствии с записями, извлекаемых из @tableorders
таблицы.
Мой запрос до сих пор:
SELECT place.someplace,
type.sometype,
Count(*) AS count
FROM @tableOrders orders
INNER JOIN @tableplace place
ON orders.place = place.id
INNER JOIN @tabletype type
ON place.id = type.id
GROUP BY someplace,
sometype
ORDER BY someplace,
sometype
Может кто-то пожалуйста, объясните логику, я должен следовать, чтобы достичь своих желаемых результатов? Заранее спасибо!